![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Пытаюсь организовать загрузку файла (одного файла) в несколько потоков, как, например, в Free Download Manager. Поиски в инете привели к следующему результату:
Код:
type TDLoad = class(TThread) private Strim: TMemoryStream; {вариант: Strim: TFileStream; - тут пока не ясно} URL: String; S, E: Cardinal; //Начальный и конечный байт для скачивания protected procedure Execute; override; public end; { TDLoad } procedure TDLoad.Execute; var h: TIdHTTP; Strim: TMemoryStream; begin inherited Execute; h:=TIdHTTP.Create(nil); h.HandleRedirects:=True; //задаем h.Request.UserAgent:= //нужные h.Request.Referer:= //параметры запроса h.OnWork:= //здесь можно визуализировать h.OnWorkBegin:= //процесс с помощью ProgressBar h.Request.ContentRangeStart:= S; //откуда начинаем закачивать h.Request.ContentRangeEnd:= E; //где заканчиваем Strim:= TMemoryStream.Create; //либо это нужно делать далее, в цикле //и передавать потоку уже созданный TMemoryStream ............................ try h.Get(URL,Strim); //если все удачно, то в Strim мы имеем кусок нужного файла Except on E : Exception do ShowMessage('Нету'+#13#10+IntToStr(h.ResponseCode)); end; h.Free; end; запрашиваем размер, делим на части, Код:
procedure TForm1.Button1Click(Sender: TObject); var i: Byte; dl: TDLoad; ms: TMemoryStream //Как вариант begin ................................. for i:= 0 to {кол-во частей} do begin .................................. ms:= TMemoryStream.Create;//вариан dl:= TDLoad.Create(True); dl.S:= //задаем начало dl.E:= //и конец части dl.Strim:= ms; end; ................................... //теперь нужно отловить завершение всех dl: TDLoad //и собрать все потоки в один файл очевидно понадобится TFileStream end; а вот как собрать части в один файл не ясно или есть какая то возможность записывать части сразу в FileStream? |