Индикация прогресса при загрузке HTTP-файла с использованием WinHTTP - PullRequest
1 голос
/ 10 сентября 2009

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

Помощь!

Спасибо!

1 Ответ

5 голосов
/ 10 сентября 2009

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

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.

и если Content-Length IS доступен, то процент может быть вычислен путем отслеживания общего количества байтов в каждом уведомлении «доступные данные», в противном случае ваше предположение будет таким же, как у меня;

...