Mirror

How to determine the size of a file (Views: 100)


Problem/Question/Abstract:

How to determine the size of a file

Answer:

Solve 1:

You can use the type TSearchRec as follows:

function LoadSize(Path: string): integer;
var
  Rec: TSearchRec;
begin
  Result := 0;
  if FindFirst(Path, faAnyFile, Rec) = 0 then
  begin
    Result := Rec.Size;
    FindClose(Rec);
  end;
end;


Solve 2:

{ ... }
var
  fileInfo: _WIN32_FILE_ATTRIBUTE_DATA;
  totalSize: Int64;
begin
  GetFileAttributesEx(PChar(EdtPath.Text), GetFileExInfoStandard, @fileInfo);
  totalSize := fileInfo.nFileSizeHigh shl 32 or fileInfo.nFileSizeLow;
end;


Solve 3:

{ ... }
var
  SR: TSearchRec;
  FileName: string;
  r: integer;
begin
  FileName := 'c:\winnt\system32\shell32.dll';
  r := FindFirst(FileName, faAnyFile, SR);
  if r = 0 then
  begin
    Label1.Caption := Format('Size of %s is %d bytes (%0.1f Mb)',
      [FileName, SR.Size, Sr.Size / 1000000]);
    FindClose(SR);
  end
  else
    Label1.Caption := 'File does not exist';
end;


Solve 4:

procedure TForm1.Button1Click(Sender: TObject);
var
  hFile: THandle;
  Size: Integer;
begin
  if OpenDialog1.Execute then
  begin
    hFile := FileOpen(OpenDialog1.FileName, fmOpenRead or fmShareDenyNone);
    Size := GetFileSize(hFile, nil);
    {CloseHandle: use to close handle created with CreateFile which is
                what FileOpen calls internally}
    CloseHandle(hFile);
    ShowMessage(Format('Size in bytes: %d', [Size]));
  end;
end;

<< Back to main page