Ir ao topo

Tecnobyte

Logomarca da Tecnobyte
Contato por WhatsApp

WhatsApp

(69) 3421-6756

Contato por Telefone

(69) 3421-6756

(69) 3421-6757

Enviar mensagem

Enviar

mensagem

Contato por Facebook

Facebook

Vídeos

Vídeos

Atendimento de segunda a sexta, das 08h00 às 19h00 (horário de Brasília).

Banner

Delphi - Arquivos, Diretórios e Discos

Como obter o tamanho de um arquivo?

A seguir temos 3 funções que retornam o tamanho de um arquivo. A primeira não é adequada para arquivos grandes, pois o retorno está limitado a um inteiro de 32 bits com sinal, cujo valor máximo é 2.147.483.647. As outras duas funções trabalham corretamente com arquivos grandes, pois o retorno é um número inteiro de 64 bits.

  • Insira na seção uses: Windows, SysUtils, Dialogs
  • Copie e cole o código a seguir logo abaixo da seção implementation em seu código-fonte.
function TamanhoArquivo1(const Arquivo: string): Integer;
var
  SR: TSearchRec;
begin
  if SysUtils.FindFirst(Arquivo, faAnyFile, SR) = 0 then
  try
    Result := SR.Size;
  finally
    SysUtils.FindClose(SR);
  end;
end;

function TamanhoArquivo2(const Arquivo: string): Int64;
var
  FileHandle: Integer;
  FileSizeLo, FileSizeHi: DWORD;
begin
  FileHandle := FileOpen(Arquivo, fmOpenRead);
  if FileHandle < 0 then
    RaiseLastOSError;
  try
    FileSizeLo := GetFileSize(FileHandle, @FileSizeHi);
    Int64Rec(Result).Lo := FileSizeLo;
    Int64Rec(Result).Hi := FileSizeHi;
  finally
    FileClose(FileHandle);
  end;
end;

function GetFileSizeEx(hFile: THandle; 
  var FileSize: Int64): BOOL; stdcall; external kernel32;

function TamanhoArquivo3(const Arquivo: string): Int64;
var
  FileHandle: Integer;
begin
  FileHandle := FileOpen(Arquivo, fmOpenRead);
  if FileHandle < 0 then
    RaiseLastOSError;
  try
    if not GetFileSizeEx(FileHandle, Result) then
      RaiseLastOSError;
  finally
    FileClose(FileHandle);
  end;
end;

Para testar:

  • Coloque um botão no formulário.
  • Programe o evento OnClick deste botão como segue.

procedure TForm1.Button1Click(Sender: TObject);
var
  Arquivo: string;
  Tamanho1, Tamanho2, Tamanho3: Int64;
begin
  Arquivo := 'C:\Tecnobyte\SAC_Plus\SAC.exe';
  Tamanho1 := TamanhoArquivo1(Arquivo);
  Tamanho2 := TamanhoArquivo2(Arquivo);
  Tamanho3 := TamanhoArquivo3(Arquivo);
  ShowMessage(
    'Arquivo: ' + Arquivo +
    #13'Tamanho1: ' + FormatFloat('#,##0', Tamanho1) + ' bytes' +
    #13'Tamanho2: ' + FormatFloat('#,##0', Tamanho2) + ' bytes' +
    #13'Tamanho3: ' + FormatFloat('#,##0', Tamanho3) + ' bytes');
end;

O conteúdo desta página pode ajudar alguém? Compartilhe!