Индикация прогресса при загрузке HTTP-файла с использованием WinHTTP
-
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.
и если доступна длина содержимого, то процент можно вычислить, отслеживая общее количество байтов в каждом уведомлении "доступные данные", в противном случае ваше предположение так же хорошо, как и мое;-).