-
Насколько я понял, то если указать рейндж например 100-500, то компонет idHTTP запишет соответствено скачаное в файл с позиции 100 и по 500?
Получается для того чтоб дозакачать прерванную закачку надо:
или где то хранить информацию о количестве сегментов и начало и конец каждого сегмента для каждой закачки
или просматривать каким то образом файл для определения количества скачанных кусков.
-
то компонет idHTTP запишет соответствено скачаное в файл с позиции 100 и по 500?
Он ничего не знает ни про какие такие "позиции"
-
idHTTP запишет соответствено скачаное в файл с позиции 100 и по 500?
с какого перепугу?
он запишет скачиваемое либо по указанному адресу буфера, начиная с его начала, либо в текущую позицию потока, если в метод был передан поток.
но никак не с позиции 100, даже если это значение было в заголовке запроса.
-
может у кого есть пример?
-
пример чего?
трех арифметических операций сложения вычитания и деления?
-
> Насколько я понял, то если указать рейндж например 100-500,
> то компонет idHTTP запишет соответствено скачаное в файл
> с позиции 100 и по 500?
Разве он пишет в файл?
-
> Разве он пишет в файл?
А куда если не в файл? можно конечно в TMemoryStream но ну его нафиг держать в памяти 4 гиговый файл.
-
Он пишет в стрим, а не в файл.
-
Попытаюсь обобщить услышанное:
Задача закачать файл 100 байт в две секции в один файл (не создаем несколько временных).
1) получаем заголовок запроса для определения размера файла
2) создаем файловый поток для файла
3) создаем первый поток для idhttp где устнавливаем рендж с 0 по 50
4) устанавливаем позицию записи в файл в начало (необязательно)
5) делаем гет запрос
6) создаем второй поток для idhttp где устнавливаем рендж с 51 до 100
7) устанавливаем позицию записи с 51 байта
8) делаем гет запрос
пункты 4 и 7 под сомнением так как неизвестно как поведет себя запись при одновременном обращении двух потоков к одному файлу.
жду комментов и предложений
-
так как неизвестно как поведет себя запись при одновременном обращении двух потоков к одному файлу
кому неизвестно?
-
> кому неизвестно?
конечно же мне:)
-
Если компонент пишет в стрим у тебя есть размер записанного!!!
Создай 5 Мем стримов и призакачке проверяй на заполнение скажем по 128Кб и по заполнению кидай их на винт :)
-
А когда закачка разрывается, в стриме есть позиция откуда качать дальше называется TMemoryStream.SIZE :)
-
> А когда закачка разрывается, в стриме есть позиция откуда
> качать дальше называется TMemoryStream.SIZE :)
Это ясно, а как определить после аварийной перезагрузки программы сколько секций было в закачке и сколько закачано в каждой сессии? Получается надо где-то хранить отдельно информацию о количестве и начале и объеме каждой секции.
-
> Usov (04.02.2009 14:20:33) [33]
Получается так
-
Это ясно, а как определить после аварийной перезагрузки программы сколько секций было в закачке и сколько закачано в каждой сессии? Получается надо где-то хранить отдельно информацию о количестве и начале и объеме каждой секции.
ну ты догада.
-
А у Download Master-a еще файл *.dfmr есть :)
-
> Медвежонок Пятачок (04.02.2009 14:42:35) [35]
Так созранять надо эту информацию
-
> А у Download Master-a еще файл *.dfmr есть :)
Насколько я знаю, DM пишет инфу о секциях в конец того файла что закачивает.
-
Сейчас нет
А раньше был :), я по старой памяти :)