Я пишу очень простой менеджер загрузки, который только может Download
- Pause
- Resume
, , как это можно resume
загрузка с точной точкой файла, остановитесь раньше, ну, на самом деле, единственное, что я ищу, это установить указатель файла на стороне сервера, а затем я могу загрузить его с точной точки, которую я хотел получить InternetReadFile(Any Other Functions are accepted if you know a better way for it)
. Хотя, InternetSetFilePointer Never works for me
:) и я не хочу использовать BITS. Я думаю, что это может произойти, отправив заголовок, но не знаю, что и как его отправить.Резюме Возможности для простого Download Manager (C++ - WinInet)
ответ
Вы ищете заголовок Range
. Используйте HttpAddRequestHeaders()
, чтобы добавить пользовательский заголовок запроса Range
, сообщающий серверу, какой диапазон байтов вы хотите. См. RFC 2616 Section 14.35 для синтаксиса.
Если сервер поддерживает диапазоны (использовать HttpQueryInfo(HTTP_QUERY_ACCEPT_RANGES)
для проверки), он будет посылать код 206
статуса вместо код в 200
состояния (используйте HttpQueryInfo(HTTP_QUERY_STATUS_CODE)
для проверки).
Если получено 206
, просто найдите существующий файл в положение резюме, а затем прочитайте данные ответа как есть в вашем файле.
Если 200
принимается, файл начинает все с начала, так как:
укоротить существующий файл и начать писать его свежим
искать файл, читать и отбрасывать до получения желаемой позиции, затем прочитайте оставшиеся данные в файл.
Рассматривается любой другой код состояния как сбой при загрузке.