Войти

Показать полную графическую версию : [решено] Как скачать большие файлы ?


Painkiller
30-06-2021, 15:45
День добрый! Нужно скачать файл большого размера , от 2 и более гб ! Перепробовал много вариантов из интернета и не один не работает .
Вот пример

uses
Wininet

function GetInetFile(const fileURL, FileName: String; Progress: TProgressBar): boolean;
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
DataSize,BufferLen: DWORD;
Stream:TMemoryStream;
begin
Result:=False;
hSession := InternetOpen(PChar(ExtractFileName(Application.ExeName)), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
hURL := InternetOpenURL(hSession, PChar(fileURL),nil,0,0,0);
try
DataSize:= 0;
BufferLen:= sizeof(DataSize);
if HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER,
@DataSize,BufferLen,PDWORD(nil)^) then
begin
Progress.Max:=DataSize;
Progress.Position:=Progress.Min;
end;
Stream:=TMemoryStream.Create;
try
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
Stream.WriteBuffer(Buffer, BufferLen);
Progress.StepBy(BufferLen);
Application.ProcessMessages;
until BufferLen = 0;
Stream.SaveToFile(FileName);
Result:=True;
finally
Stream.Free;
end;
finally
InternetCloseHandle(hURL);
Progress.Position:= SizeOf(Buffer);
end;
finally
InternetCloseHandle(hSession);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if GetInetFile('http://a0555996.xsph.ru/activation/ru_windows_7_ultimate_with_sp1_x64_dvd_u_677391.iso', 'H:\ru_windows_7_ultimate_with_sp1_x64_dvd_u_677391.iso', ProgressBar1) then
ShowMessage('Скачка завершена');
end;

end.

и тоже не работает =(
Помогите примером, кто ?

Painkiller
30-06-2021, 21:53
Вопрос закрыт! Задачу решил как всегда сам

lxa85
05-07-2021, 16:05
Задачу решил как всегда сам »
Это хорошо.
А как? :)

Grabber2006
11-08-2021, 03:16
DataSize и BufferLen надо было объявить int64.

А вообще если iso не знаю, но на exe (например, самораспаковывающийся архив) антивирус будет орать trojan-downloader.




© OSzone.net 2001-2012