¿Cómo se obtiene el tamaño del archivo en C #?

307

Necesito una forma de obtener el tamaño de un archivo usando C #, y no el tamaño en el disco. ¿Cómo es esto posible?

Actualmente tengo este bucle

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

¿Esto devolverá el tamaño o el tamaño en el disco?

JL
fuente
Relacionado, pero para VB.NET: determinar el tamaño del archivo en VB.NET ,
Peter Mortensen

Respuestas:

324

FileInfo.Length devolverá la longitud del archivo, en bytes (no el tamaño en el disco), así que creo que esto es lo que está buscando.

Marcin Deptuła
fuente
44
También: social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/… esta es una discusión sobre cómo obtener "el otro valor", que es el tamaño en el disco.
Marcin Deptuła
386

Si ya tiene una ruta de archivo como entrada, este es el código que necesita:

long length = new System.IO.FileInfo(path).Length;
vive el amor
fuente
1
Rodéelo con el bloque try / catch y verifique todas las excepciones posibles como se describe aquí : SecurityException, UnauthorizedAccessException, PathTooLongException, NotSupportedException y, dependiendo de su caso de uso, ArgumentNullException y ArgumentException
huha
37

FileInfo.Lengthhará el truco (según MSDN "[g] obtiene el tamaño, en bytes, del archivo actual"). Hay una buena página en MSDN sobre tareas comunes de E / S.

jason
fuente
11

MSDN FileInfo.Length dice que es "el tamaño del archivo actual en bytes".

Mi búsqueda típica de Google para algo como esto es: msdn FileInfo

Austin Salonen
fuente
7

Devuelve la longitud del contenido del archivo

Thomas Levesque
fuente
4

El tamaño en el disco puede ser diferente si mueve el archivo a otro sistema de archivos (FAT16, NTFS, EXT3, etc.)

Como han dicho otros respondedores, esto le dará el tamaño en bytes, no el tamaño en el disco.

Sales de Charlie
fuente
0

La propiedad Longitud de la clase FileInfo devuelve el tamaño del archivo (no el tamaño en el disco). Si desea un tamaño de archivo formateado (es decir, 15 KB) en lugar de un valor de byte largo, puede usar CSharpLib , un paquete que he creado que agrega más funcionalidad a la clase FileInfo. Aquí hay un ejemplo:

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