Есть необходимость чтения данных из удаленного текстового файла.
Использую следующий код:
При выполнении InternetReadFile() всегда возвращает true, даже если файл не существует(???).
При этом значение rBytes - фактически считанное из файла количество байт - всегда 0, т.е. данные не считываются.
Не могу понять сочетания "успешного" выполнения функции InternetReadFile() и нулевого количества считанных данных.
По последнему сочетанию в https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa385103(v=vs.85).aspx прямо написано, что таким способом устанавливается факт выхода указателя в файле на (за) конец файла:
"To ensure all data is retrieved, an application must continue to call the InternetReadFile function until the function returns TRUE and the lpdwNumberOfBytesRead parameter equals zero."
Перевод Гугл: Для того, чтобы гарантировать, что все данные будут извлекаться, приложение должно продолжать вызывать функцию InternetReadFile, пока функция не возвращает значение TRUE и низкое число параметра Bytes Read равно нулю.
По поводу всегда нулевого rbytes я бы озаботился типом этого целого. В DLL требуется беззнаковый, объявлен знаковый. Надо и длины типов сравнить.
По поводу всегда true, даже если файл не существует. Тут, по-моему, надо отвыкать от слова файл. Вместо файла на том конце созданного HTTP канала могут находиться параметры поискового запроса, и в канал постепенно забрасываются данные, иногда он бывает пуст, затем что-нибудь появится. Но cам канал отрабатывает успешно, true лишь говорит, что добраться до той стороны канала и передать то, что нужно, удалось корректно.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть необходимость чтения данных из удаленного текстового файла.
Использую следующий код:
При выполнении InternetReadFile() всегда возвращает true, даже если файл не существует(???).
При этом значение rBytes - фактически считанное из файла количество байт - всегда 0, т.е. данные не считываются.
Не могу понять сочетания "успешного" выполнения функции InternetReadFile() и нулевого количества считанных данных.