Есть url, нужно найти и контролировать периодически наличие в этом файле некоей фразы. Фраза находится примерно в 20 кБ от начала файла. Первое чтение читаю файл блоками по 256 байт начиная с начала. Когда нашёл фразу, запоминаю оффсет блока, в котором была найдена фраза. При следующем чтении с целью экономии траффика хочу прочесть не весь файл снова, а именно тот блок, в котором находилась фраза. Пытался воспользоваться InternetSetFilePointer, но она почему-то всё время возвращает -1 (ошибка). И файл опять зачитывается с самого начала. invoke InternetSetFilePointer, hUrl, curPointer, NULL, FILE_BEGIN, NULL Вроде здесь ничего криминального нет. В curPointer при повторном чтении сидит значение оффсета блока, найденное при первом чтении. Кто-нибудь сталкивался с подобным?
Качалки типа FlashGet, Download Master иногда пишут: "сервер не поддерживает докачку" - может дело в этом?, а вообще-то наверное можно и подглядеть как они эту проблему решают
Обязательно ли использование Internet-функций? Если нет, то в HTTP-протоколе получение байтов с определенного оффсета обеспечивается заголовком Range
Дело не в достижении конца файла. Чтение прерывается на середине файла (нужный блок в середине). Возможно дело в том, что это .php файл. Скрипт на сервере генерит html код и отдаёт его по запросу. Вот только перед тем как отдать, этот html сохраняется в файл, или нет, сразу отдается из буфера? Если не сохраняется, то InternetSetFilePointer просто применить не к чему получается. Этот как версия. Sharp IceStudent Как я понял, это через HttpOpenRequest - HttpSendRequest? Есть какой-нибудь пример с этим Range? Как формировать заголовок? Я тут нашёл несколько примеров, но они все используют некие заголовки по умолчанию (NULL). А как самому сформировать заголовок?
То, как сервер реагирует на Range - это его, сервера, проблемы. Но он должен либо сказать 206 Partial Content (все хорошо), либо ругнуться. Думаю, через HttpAddRequestHeaders можно добавить заголовок. Примеры использования Range приведены в RFC 2616, самый простой: Range: bytes=500-999
Сервер не поддерживает докачки - это если конечный файл там не лежит. Попробуй провести тест Пошли клиенту заголовки Content-type:Application/x-msdownload //для Windows или Content-type:Application/force-download //Для всех остальных Content-length:40254444521111254125 И клиенту придёт такое, что ах!!!