Comment obtenez-vous la taille du fichier en C #?

307

J'ai besoin d'un moyen d'obtenir la taille d'un fichier en utilisant C #, et non la taille sur le disque. Comment est-ce possible?

Actuellement, j'ai cette boucle

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

Est-ce que cela retournera la taille ou la taille sur le disque?

JL.
la source
Lié, mais pour VB.NET: Déterminer la taille du fichier dans VB.NET ,
Peter Mortensen

Réponses:

386

Si vous avez déjà un chemin de fichier en entrée, voici le code dont vous avez besoin:

long length = new System.IO.FileInfo(path).Length;
l'amour en direct
la source
1
Entourez-le de bloc try / catch et vérifiez toutes les exceptions possibles comme décrit ici : SecurityException, UnauthorizedAccessException, PathTooLongException, NotSupportedException et - selon votre cas d'utilisation - ArgumentNullException et ArgumentException
huha
37

FileInfo.Lengthfera l'affaire (par MSDN, il "[g] ets la taille, en octets, du fichier actuel.") Il y a une belle page sur MSDN sur les tâches d'E / S courantes.

Jason
la source
11

MSDN FileInfo.Length indique qu'il s'agit de "la taille du fichier actuel en octets".

Ma recherche Google typique pour quelque chose comme ceci est: msdn FileInfo

Austin Salonen
la source
7

Il renvoie la longueur du contenu du fichier

Thomas Levesque
la source
4

La taille sur le disque peut être différente si vous déplacez le fichier vers un autre système de fichiers (FAT16, NTFS, EXT3, etc.)

Comme d'autres répondants l'ont dit, cela vous donnera la taille en octets, pas la taille sur le disque.

Charlie Salts
la source
0

La propriété Length de la classe FileInfo renvoie la taille du fichier (pas la taille sur le disque). Si vous voulez une taille de fichier formaté (c'est-à-dire 15 Ko) plutôt qu'une valeur d'octet long, vous pouvez utiliser CSharpLib , un package que j'ai créé qui ajoute plus de fonctionnalités à la classe FileInfo. Voici un exemple:

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