Пытаюсь организовать загрузку файла (одного файла) в несколько потоков, как, например, в Free Download Manager. Поиски в инете привели к следующему результату:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | type
TDLoad = class (TThread)
private
Strim: TMemoryStream;
URL: String ;
S, E: Cardinal ;
protected
procedure Execute; override;
public
end ;
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:=
h . Request . ContentRangeStart:= S;
h . Request . ContentRangeEnd:= E;
Strim:= TMemoryStream . Create;
............................
try
h . Get(URL,Strim);
Except
on E : Exception do
ShowMessage( 'Нету' +# 13 # 10 +IntToStr(h . ResponseCode));
end ;
h . Free;
end ;
|
Дальше более или менее ясно:
запрашиваем размер, делим на части,
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 ;
...................................
end ;
|
отловить завершение всех потоков я, вероятно, еще сумею, хотя и здесь не откажусь от помощи
а вот как собрать части в один файл не ясно
или есть какая то возможность записывать части сразу в FileStream?