Você está aqui: Delphi ::: Dicas & Truques ::: Arquivos e Diretórios |
Obtendo o tamanho de um arquivo em bytes, KB, MB ou GBQuantidade de visualizações: 23573 vezes |
Em algumas situações precisamos obter o tamanho de um arquivo em bytes e, se necessário, converter este valor em bytes para KB, MB ou GB. Esta dica mostra como isso pode ser feito. Aqui nós temos duas funções. A função TamanhoArquivoBytes() recebe o caminho e nome de um arquivo e retorna seu tamanho em bytes. Já a função TamanhoArquivoFormatado() recebe um valor em bytes e devolve uma string formatada. Veja o exemplo completo: // permite formatar o tamanho de um arquivo em bytes em // Kb, Mb ou Gb function TamanhoArquivoFormatado(const bytes: Longint): string; const b = 1; // byte kb = 1024 * b; // kilobyte mb = 1024 * kb; // megabyte gb = 1024 * mb; // gigabyte begin if bytes > gb then Result := FormatFloat('#.## GB', bytes / gb) else if bytes > mb then Result := FormatFloat('#.## MB', bytes / mb) else if bytes > kb then Result := FormatFloat('#.## KB', bytes / kb) else Result := FormatFloat('#.## bytes', bytes); end; // função que permite obter o tamanho de um arquivo em bytes function TamanhoArquivoBytes(arquivo: string): Int64; var search_rec: TSearchRec; begin if FindFirst(arquivo, faAnyFile, search_rec) = 0 then Result := Int64(search_rec.FindData.nFileSizeHigh) shl Int64(32) + Int64(search_rec.FindData.nFileSizeLow) else Result := -1; FindClose(search_rec); end; procedure TForm1.Button1Click(Sender: TObject); var arquivo: string; begin // nome do arquivo que queremos obter o tamanho arquivo := 'C:\estudos_delphi\programa_vcl\arquivo.txt'; // exibe o resultado ShowMessage('O tamanho do arquivo é: ' + TamanhoArquivoFormatado(TamanhoArquivoBytes(arquivo))); end; Note que aqui nós usamos o campo FindData da estrutura TSearchRec. Este campo contém informações adicionais sobre um arquivo, tais como a data e hora de criação do arquivo, data e hora do último acesso, etc. Porém, este campo é específico à plataforma Windows, o que pode resultar em um warning do tipo: [DCC Warning] Unit1.pas(54): W1002 Symbol 'FindData' is specific to a platform Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |