1

使用 WinHTTP 下载文件时,我想在我的 C++ Windows 应用程序中实现一个进度条。知道怎么做吗?看起来好像 WinHttpSetStatusCallback 是我想要使用的,但我没有看到要查找的通知......或者如何获得“下载百分比”......

帮助!

谢谢!

4

1 回答 1

5

根据文档

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 可用,则可以通过跟踪每个“可用数据”通知的总字节数来计算百分比,否则你的猜测和我的一样好;-)。

于 2009-09-10T18:58:55.183 回答