S
shisik
Пишу свою качалку для интернета с возможностью докачки файлов. Использую WinInet API. Для организации докачки есть функция InternetSetFilePointer. Только после её использования файл не начинает качаться с указанной позиции, а качается "вхолостую" до указанной позиции, а потом продолжает качаться нормально. При этом функция InternetReadFile не возвращает управление, пока не дойдёт до позиции, указанной в InternetSetFilePointer.
В интернете я нашел объяснение: проблема в том, что если файла нет в кеше (Temporary Internet Files), то он его скачивает сначала в кеш (целиком), а потом уже дальше. И действительно, пока файл скачан не на 100% в интернет-кеше его нет. Потом, когда скачается полностью, он там появляется.
Возникает вопрос: можно ли это как-нибудь обойти? Можно ли заставить программу (или wininet) писать недокачанные файлы в интернет-кеш? Или ещё лучше создать свой локальный кеш (чтоб при очистке общего кеша не удалялись файлы), в который и будут скачиваться файлы. Или например чтоб кешем считался сам файл, независимо от его местонахождения. Это был бы самый оптимальный вариант В конце концов, другие "качалки" это ж умеют...
ЗЫ. Возникает вопрос к Microsoft: какой "умный" человек так реализовал InternetSetFilePointer/InternetReadFile?
В интернете я нашел объяснение: проблема в том, что если файла нет в кеше (Temporary Internet Files), то он его скачивает сначала в кеш (целиком), а потом уже дальше. И действительно, пока файл скачан не на 100% в интернет-кеше его нет. Потом, когда скачается полностью, он там появляется.
Возникает вопрос: можно ли это как-нибудь обойти? Можно ли заставить программу (или wininet) писать недокачанные файлы в интернет-кеш? Или ещё лучше создать свой локальный кеш (чтоб при очистке общего кеша не удалялись файлы), в который и будут скачиваться файлы. Или например чтоб кешем считался сам файл, независимо от его местонахождения. Это был бы самый оптимальный вариант В конце концов, другие "качалки" это ж умеют...
ЗЫ. Возникает вопрос к Microsoft: какой "умный" человек так реализовал InternetSetFilePointer/InternetReadFile?