Использую функцию URLDownloadtofile для загрузки ресурсов (файлы 50-100 мегобайт) из сети на машину пользователя.
У некоторых работает хорошо, а у некоторых загрузка отваливается на 60%-80% с ошибкой. При этом в коде я делаю несколько попыток закачать файл, но загрузка прерывается стабильно.
При этом если пользователь качает сам файл в браузере, все отлично скачивается.
С чем это может быть связано?
Здравствуйте, C0x, Вы писали:
C0x>При этом если пользователь качает сам файл в браузере, все отлично скачивается.
Браузеры умеют докачивать файлы при обрыве соединения (если сервер поддерживает). И тебе можно делать тоже самое, благо это можно сделать и на WinInet.
C0x>С чем это может быть связано?
Здравствуйте, Aniskin, Вы писали:
A>Здравствуйте, C0x, Вы писали:
C0x>>При этом если пользователь качает сам файл в браузере, все отлично скачивается.
A>Браузеры умеют докачивать файлы при обрыве соединения (если сервер поддерживает). И тебе можно делать тоже самое, благо это можно сделать и на WinInet.
Я не использую MFC и не предполагаю его использование в данном проекте. Поэтому тут либо curl подключать либо самописную закачку делать через сокеты.
C0x>>С чем это может быть связано?
A>Может быть канал нестабильный?
Он как-то уж слишком стабильно нестабильный, что странно. Я уж думал может антивирусы какие-то или фаерволлы блочат. Но тогда и браузер бы врядли скачал бы.
C0x>Я не использую MFC и не предполагаю его использование в данном проекте. Поэтому тут либо curl подключать либо самописную закачку делать через сокеты.
Я не предлагаю использовать MFC. Ты же ведь используешь чистую WinApi функцию URLDownloadToFile из Urlmon.dll, и я предлагаю использовать пару функций из этой же dll: InternetOpen/InternetConnect/HttpOpenRequest/HttpSendRequest/InternetReadFile/InternetCloseHandle.
Здравствуйте, C0x, Вы писали:
C0x>Он как-то уж слишком стабильно нестабильный, что странно. Я уж думал может антивирусы какие-то или фаерволлы блочат. Но тогда и браузер бы врядли скачал бы.
Они (антивирусы и фаерволы) вполне осведомлены о том, кто инициирует соединение. Поэтому если у пользователей стоит какой-то мусор — я б такую идею не отвергал.
Но конечно, лучше бы докачку заиметь на таких объемах.
Здравствуйте, Aniskin, Вы писали:
C0x>>Я не использую MFC и не предполагаю его использование в данном проекте. Поэтому тут либо curl подключать либо самописную закачку делать через сокеты.
A>Я не предлагаю использовать MFC. Ты же ведь используешь чистую WinApi функцию URLDownloadToFile из Urlmon.dll, и я предлагаю использовать пару функций из этой же dll: InternetOpen/InternetConnect/HttpOpenRequest/HttpSendRequest/InternetReadFile/InternetCloseHandle.
Попробовал, почему-то скачиваемый файл больше на несколько байт оригинала. Сравнил файлы, обнаружил что появились местами лишние \r\n. Вероятно это разделитель чанков при http передаче.
Что с этим можно сделать?
Здравствуйте, C0x, Вы писали:
C0x>Здравствуйте, Aniskin, Вы писали:
C0x>>>Я не использую MFC и не предполагаю его использование в данном проекте. Поэтому тут либо curl подключать либо самописную закачку делать через сокеты.
A>>Я не предлагаю использовать MFC. Ты же ведь используешь чистую WinApi функцию URLDownloadToFile из Urlmon.dll, и я предлагаю использовать пару функций из этой же dll: InternetOpen/InternetConnect/HttpOpenRequest/HttpSendRequest/InternetReadFile/InternetCloseHandle.
C0x>Попробовал, почему-то скачиваемый файл больше на несколько байт оригинала. Сравнил файлы, обнаружил что появились местами лишние \r\n. Вероятно это разделитель чанков при http передаче. C0x>Что с этим можно сделать?
Сорри, сам дурак. Пишу файл через fwrite, а открыл как "w+" (текстовый).