![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Докачка файлов через idhttp. [D7, WinXP]
vegarulez © (2010-05-23 22:45:00)Привет всем мастерам!
Возникла задача скачивания файлов из интернета.
Скачал довольно хороший пример.
delphi.int.ru/download/file/257/
но там нет такого нужного момента как докачка файла, при разрыве соединения.
Полазил в интернете и нашёл ещё пример
delphisources.ru/pages/sources/internet/2005_year/download_plus.html
но он не компилиться под d7+indy10.1.5
Прошу помочь с этим вопросом.
Почитал статьи в интернете, и скачал пару примеров с использованием WinInet.
delphisources.ru/pages/faq/base/download_with_download_again.html
Там используется такой параметр как range, используя его в заголовке idhhtp можно организовать докачку, но тут вопрос метод get при обращении на скачивание файла скидывает в поток поток пишет в файл. Тут просто у меня не понимание - как продолжить дописывать файл при разрыве соединения и организации повторного закачивания?
Плохиш (2010-05-26 12:34:00) [21]1. Запроси размер файла
2. Создай filestream требуемого размера
3. пиши каждую принятую часть в соответствующее место стрима.
PS. из [9] " надо просто написать часть программы, которая записывает полученные данные в файл на нужное место."
Palladin (2010-05-26 12:31:00) [22]http://www.google.com/search?client=opera&rls=ru&q=content-range&sourceid=opera&ie=utf-8&oe=utf-8
vegarulez (2010-05-26 12:24:00) [23]TFileStream.Create(ToFolder, fmCreate);
А файл уже есть, допустим часть скачена уже. Не знаю как правильно сделать чтобы поток TFileStream приклеил к уже существующему файлу следющую часть...
думаю сделать так - проверять есть ли файл, если нет - то запрашивать его размер и качать по частям через range, далее эти части "склеивать" между собой. Ну сообствено зная стандартный размер части будет понятно скачалась она полностью или нет, взависимости от этого переходить к скачиванию следующей части.
Плохиш (2010-05-24 10:41:00) [24]
> Там используется такой параметр как range, используя его
> в заголовке idhhtp можно организовать докачку, но тут вопрос
> метод get при обращении на скачивание файла скидывает в
> поток поток пишет в файл. Тут просто у меня не понимание
> - как продолжить дописывать файл при разрыве соединения
> и организации повторного закачивания?
Поток, в который скидывают, никуда сам ничего не пишет. Т.ч. надо просто написать часть программы, которая записывает полученные данные в файл на нужное место.
Медвежонок Пятачок (2010-05-24 00:19:00) [25]Список тот же, которые в процедуре обработчика.
Если бы он был тот же, то не было бы
incompatible types: 'Parameters lists differ'
vegarulez (2010-05-24 00:19:00) [26]только докачка в том понимании в каком она должна быть - не пашет (
vegarulez (2010-05-23 23:42:00) [27]Нашёл. Поменял. 2-ой пример запустился.
vegarulez (2010-05-23 23:28:00) [28]Хотя не... всё там также (
vegarulez (2010-05-23 23:25:00) [29]хотя не... разница увидена
Sender : TObject;
и
ASender : TObject;
vegarulez (2010-05-23 23:23:00) [30]Список тот же, которые в процедуре обработчика... что в первом примере что во втором
Медвежонок Пятачок (2010-05-23 23:20:00) [31]скзано же по-русски:
incompatible types: 'Parameters lists differ'
текущая версия инди имеет другой список параметров обработчика OnWork по сравнению с компилируемым примером.
vegarulez (2010-05-23 22:55:00) [32]для первого примера - описание delphi.int.ru/articles/39/
Второй пример не компилиться в юните uThreads ругается на строкуHTTP.OnWork := OnWork;
ошибку выводит:
incompatible types: 'Parameters lists differ'
Посомтрел в первом примере - там впринципе также работа с onwork происходит... подскажите что может быть не так???