Индикация прогресса при загрузке HTTP-файла с использованием WinHTTP

StackOverflow https://stackoverflow.com/questions/1407023

  •  05-07-2019
  •  | 
  •  

Вопрос

Я хочу реализовать индикатор выполнения в моем приложении C ++ для Windows при загрузке файла с использованием WinHTTP.Есть какие-нибудь идеи, как это сделать?Похоже, что WinHttpSetStatusCallback - это то, что я хочу использовать, но я не вижу, какое уведомление искать...или как получить "процент загруженности"...

Помогите!

Спасибо!

Это было полезно?

Решение

За документы:

WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE

Данные доступны для извлечения с помощью WinHttpReadData.Параметр lpvStatusInformation указывает на DWORD, который содержит количество доступных байт данных.Параметр dwStatusInformationLength сам по себе равен 4 (размер DWORD).

и

WINHTTP_CALLBACK_STATUS_READ_COMPLETE

Данные были успешно считаны с сервера .Параметр lpvStatusInformation содержит указатель на буфер, указанный при вызове WinHttpReadData.Параметр dwStatusInformationLength содержит количество прочитанных байтов.

Могут быть и другие соответствующие уведомления, но эти два, по-видимому, являются ключевыми.Получение "процента" не обязательно является тривиальным, потому что вы можете не знать, сколько данных вы получаете (не для всех загрузок установлена длина содержимого ...);вы можете получить заголовки с помощью:

WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE

Заголовок ответа был получен и доступен с помощью WinHttpQueryHeaders.Параметр lpvStatusInformation равен NULL.

и если доступна длина содержимого, то процент можно вычислить, отслеживая общее количество байтов в каждом уведомлении "доступные данные", в противном случае ваше предположение так же хорошо, как и мое;-).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top