Подскажите, есть ли возможность узнать длину файла до его чтения? Это для того, чтобы можно было сделать оценку процентов загруженных данных в случае больших объемов, медленных скоростей.
Подскажите, есть ли возможность узнать длину файла до его чтения? Это для того, чтобы можно было сделать оценку процентов загруженных данных в случае больших объемов, медленных скоростей.
думаю что можно. и в описании на msdn по wininet.dll это вы найдёте.
Подскажите, есть ли возможность узнать длину файла до его чтения? Это для того, чтобы можно было сделать оценку процентов загруженных данных в случае больших объемов, медленных скоростей.
думаю что можно. и в описании на msdn по wininet.dll это вы найдёте.
Предполагаю будет хорошей темой для статьи с полным раскрытием применения wininet.dll
я только за! очень пользительная будет статья.
Подскажите, есть ли возможность узнать длину файла до его чтения? Это для того, чтобы можно было сделать оценку процентов загруженных данных в случае больших объемов, медленных скоростей.
возможность есть, если сервер сообщает длину содержимого.
Для получения информации о запросе можно использовать функцию HttpQueryInfo из wininet.dll - эта функция возвращает требуемую информацию в указанный массив в строковом виде.
Пример использования:
в секции #import добавьте описание:
int HttpQueryInfoW(int hRequest,int dwInfoLevel,uchar &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);
также добавьте
#define HTTP_QUERY_CONTENT_LENGTH 5
затем в коде после вызова InternetOpenUrlW и получения hURL нужно добавить код:
int BufLen=2048; int ind=0; uchar buf0[2048]; string s=""; int ContentSize_HttpQueryInfoW=0; int iRes; iRes=HttpQueryInfoW(hURL,HTTP_QUERY_CONTENT_LENGTH,buf0,BufLen,ind); if(iRes<=0) { Print("Error in call of HttpQueryInfoW()"); } else { s=""; for(int k=0;k<BufLen;k++) { s=s+CharToString(buf0[k]);} Print("HTTP_QUERY_CONTENT_LENGTH:",s); if (StringLen(s)>0) ContentSize_HttpQueryInfoW=StringToInteger(s); Alert("Размер содержимого=",ContentSize_HttpQueryInfoW); }
в нашем тестовом примере с yandex.ru получается "Размер содержимого= 44649", что соответствует размеру загруженного файла. т.е. до начала загрузки (InternetReadFile) мы узнали длину содержимого.
Добавил эту возможность в текущую версию скрипта.
Замечательный код!
Но, раз уж вы разобрались с этими функциями, то не могли бы вы подсказать, как вместо записи в файл, получить просто функцию возвращающую строку.
А то что-то я с этими массивами пока никак не разберусь...
Замечательный код!
Но, раз уж вы разобрались с этими функциями, то не могли бы вы подсказать, как вместо записи в файл, получить просто функцию возвращающую строку.
А то что-то я с этими массивами пока никак не разберусь...
Вот здесь скрипт запихивает полученные данные в строку с идентификатором s:
for(int k=0;k<BufLen;k++) { s=s+CharToString(buf0[k]);}
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
WININET_TEST:
Простой пример использования функций библиотеки wininet.dll для загрузки страниц или файлов из Internet.
Для работы установите опцию "Разрешить импорт DLL" и запустите скрипт на любом графике.
Автор: MetaQuotes