- Регистрация
- 9 Май 2015
- Сообщения
- 1,562
- Баллы
- 155
Как узнать размер файла в Интернете?
Способ второй
Код:
uses
..., WinInet;
(* Функция возвращает размер файла в байтах *)
function GetUrlSizeInByte( const URL: string ): integer;
var
hSession, hFile: hInternet;
dwBuffer: array[1..20] of char;
dwBufferLen, dwIndex: DWORD;
begin
Result := 0;
hSession := InternetOpen( 'GetUrlSize', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil ,0 );
if Assigned( hSession ) then
begin
hFile := InternetOpenURL( hSession, PChar( URL ), nil, 0, INTERNET_FLAG_RELOAD, 0 );
dwIndex := 0;
dwBufferLen := 20;
if HttpQueryInfo( hFile, HTTP_QUERY_CONTENT_LENGTH, @dwBuffer, dwBufferLen, dwIndex ) then
Result := StrToInt( StrPas( @dwBuffer ) );
if Assigned( hFile ) then
InternetCloseHandle( hFile );
InternetCloseHandle( hSession );
end;
end;
Код:
uses
..., WinInet;
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;