Узнаём размер файла перед скачиванием

Mazahaka_lab

Принятый Кодер
Ofline
Публикую рабочий пример, взятый из своей программы . Определяет в байтах, мб , гб . Проверен на Embarcadero RAD Studio 10.2
Код:
uses
wininet

function StrFormatByteSizeW(ASize: UInt64; szBuf: PWideChar; uiBufSize: UINT): PWideChar; stdcall; external 'shlwapi.dll';
function FmtFormatSize(const ASize: UInt64): String;
var
Buf: WideString;
begin
SetLength(Buf, 1024);
if StrFormatByteSizeW(ASize, PWideChar(Buf), Length(Buf)) <> nil then
Result := PWideChar(Buf)
else Result := UIntToStr(ASize);
end;

function GetHttpFileSize( const URL: string ): Int64;
var
hSession, hRequest: Pointer;
lpBuf: array[0..30] of Char;
dwBufLen: DWORD;
begin
hSession := InternetOpen( nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
hRequest := InternetOpenUrl( hSession, PChar( URL ), nil, 0, 0, 0 );
dwBufLen := SizeOf( lpBuf );
if not HttpQueryInfo( hRequest, HTTP_QUERY_CONTENT_LENGTH, @lpBuf, dwBufLen, PDWORD( nil )^ ) then
Result := -1
else
Result := StrToInt64Def( lpBuf, -1 );
InternetCloseHandle( hRequest );
InternetCloseHandle( hSession );
end;

procedure TForm1.Button1Click(Sender: TObject);
var
FileOnNet: string ;
i :Int64;
begin
FileOnNet:='http://download.geo.drweb.com/pub/drweb/cureit/cureit.exe';
i:=GetHttpFileSize(FileOnNet);
caption:='Размер: '+ FmtFormatSize(i);
end;
end.


sshot-2.webp
 
Назад
Сверху Снизу