Получение размера файла в Delphi 2010 или позже?

Я - поклонник Грубые Графики , но Google Charts также хорош, если Вы не возражаете полагаться на внешний сервер.

29
задан Warren P 31 October 2012 в 18:49
поделиться

2 ответа

Я не уверен, есть ли способ "Delphi 2010" , но есть способ Windows, который не включает FindFirst и все такое .

Я собрал это преобразование этой процедуры в Delphi (и в процессе изменил его для обработки файлов размером> 4 ГБ, если вам это понадобится).

  uses
    WinApi.Windows;

  function FileSize(const aFilename: String): Int64;
  var
    info: TWin32FileAttributeData;
  begin
    result := -1;

    if NOT GetFileAttributesEx(PWideChar(aFileName), GetFileExInfoStandard, @info) then
      EXIT;

    result := Int64(info.nFileSizeLow) or Int64(info.nFileSizeHigh shl 32);
  end;

На самом деле вы можете просто использовать GetFileSize () , но для этого требуется HANDLE файла, а не только имя файла, и аналогично предложению GetCompressedFileSize () , для этого требуются две переменные. Оба GetFileSize () и GetCompressedFileSize () перегружают свое возвращаемое значение,

49
ответ дан 28 November 2019 в 01:15
поделиться

Вы также можете использовать DSiFileSize из DSiWin32 . Работает во "всем" Delphis. Внутри он вызывает CreateFile и GetFileSize.

function DSiFileSize(const fileName: string): int64;
  var
    fHandle: DWORD;
  begin
    fHandle := CreateFile(PChar(fileName), 0, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if fHandle = INVALID_HANDLE_VALUE then
      Result := -1
    else try
      Int64Rec(Result).Lo := GetFileSize(fHandle, @Int64Rec(Result).Hi);
    finally CloseHandle(fHandle); end;
  end; { DSiFileSize }
4
ответ дан 28 November 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: