我正在写一个非常简单的下载管理器,它可以Download
- Pause
- Resume
,
怎么可能从之前停止的文件的确切位置resume
下载,实际上我唯一想要的是如何在服务器端设置文件指针然后我可以从 InternetReadFile (Any Other Functions are accepted if you know a better way for it)
我想要的确切点。
虽然,InternetSetFilePointer Never works for me
:)我不想使用 BITS 。
我认为这可以通过发送标题来实现,但不知道发送它的方式和方式。
答案 0 :(得分:2)
您正在寻找Range
标题。使用HttpAddRequestHeaders()
添加自定义Range
请求标头,告知服务器您需要的字节范围。有关语法,请参阅RFC 2616 Section 14.35。
如果服务器支持范围(使用HttpQueryInfo(HTTP_QUERY_ACCEPT_RANGES)
进行验证),它将发送206
状态代码而不是200
状态代码(使用HttpQueryInfo(HTTP_QUERY_STATUS_CODE)
进行验证)
如果收到206
,只需将您现有的文件搜索到恢复位置,然后按原样读取您的文件中的响应数据。
如果收到200
,则文件从头开始,所以:
截断现有文件并开始重新编写
寻找文件,读取并丢弃响应数据,直至到达所需位置,然后将剩余数据读入您的文件。
将任何其他状态代码视为下载失败。