Como você obtém o tamanho do arquivo em c #?

307

Eu preciso de uma maneira de obter o tamanho de um arquivo usando c #, e não o tamanho do disco. Como isso é possível?

Atualmente eu tenho esse loop

foreach (FileInfo file in downloadedMessageInfo.GetFiles())
{
    //file.Length (will this work)
}

Isso retornará o tamanho ou o tamanho do disco?

JL.
fonte
Relacionados, mas para VB.NET: Determinar o tamanho do arquivo em VB.NET ,
Peter Mortensen

Respostas:

324

FileInfo.Length retornará o tamanho do arquivo, em bytes (não no tamanho do disco), então é isso que você está procurando, eu acho.

Marcin Deptuła
fonte
4
Também: social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/… esta é uma discussão sobre como obter "o outro valor", que é o tamanho do disco.
Marcin Deptuła 04/09/09
386

Se você já possui um caminho de arquivo como entrada, este é o código que você precisa:

long length = new System.IO.FileInfo(path).Length;
amor ao vivo
fonte
1
Envolva-o com o bloco try / catch e verifique todas as possíveis exceções, conforme descrito aqui : SecurityException, UnauthorizedAccessException, PathTooLongException, NotSupportedException e - dependem do seu caso de uso - ArgumentNullException e ArgumentException
huha
37

FileInfo.Lengthfará o truque (por MSDN, "[g] define o tamanho, em bytes, do arquivo atual".) Há uma boa página no MSDN em tarefas comuns de E / S.

Jason
fonte
11

MSDN FileInfo.Length diz que é "o tamanho do arquivo atual em bytes".

Minha pesquisa típica no Google por algo assim é: msdn FileInfo

Austin Salonen
fonte
7

Retorna o comprimento do conteúdo do arquivo

Thomas Levesque
fonte
4

O tamanho do disco pode ser diferente se você mover o arquivo para outro sistema de arquivos (FAT16, NTFS, EXT3, etc)

Como outros respondentes disseram, isso fornecerá o tamanho em bytes, não o tamanho do disco.

Charlie Salts
fonte
0

A propriedade FileInfo da classe 'Length retorna o tamanho do arquivo (não o tamanho do disco). Se você deseja um tamanho de arquivo formatado (ou seja, 15 KB) em vez de um valor de bytes longos, pode usar o CSharpLib , um pacote que criei que adiciona mais funcionalidade à classe FileInfo. Aqui está um exemplo:

using CSharpLib;
FileInfo info = new FileInfo("sample.txt");
Console.WriteLine(info.FormatBytes());  // Output: 15 MB
S. Ferrell
fonte