Jak uzyskać rozmiar pliku w C #?

307

Potrzebuję sposobu, aby uzyskać rozmiar pliku za pomocą C #, a nie rozmiar na dysku. Jak to jest możliwe?

Obecnie mam tę pętlę

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

Czy to zwróci rozmiar lub rozmiar na dysku?

J L.
źródło
Powiązane, ale dla VB.NET: Określanie rozmiaru pliku w VB.NET ,
Peter Mortensen

Odpowiedzi:

386

Jeśli masz już ścieżkę do pliku jako dane wejściowe, potrzebujesz takiego kodu:

long length = new System.IO.FileInfo(path).Length;
żywa miłość
źródło
1
Otocz go blokiem try / catch i sprawdź wszystkie możliwe wyjątki, jak opisano tutaj : SecurityException, UnauthorizedAccessException, PathTooLongException, NotSupportedException i - w zależności od przypadku użycia - ArgumentNullException i ArgumentException
huha
37

FileInfo.Lengthzrobi lewę (według MSDN it „[g] określa rozmiar bieżącego pliku w bajtach.”) Na MSDN znajduje się ładna strona na temat typowych zadań we / wy.

Jason
źródło
11

MSDN FileInfo.Length mówi, że jest to „rozmiar bieżącego pliku w bajtach”.

Moje typowe wyszukiwanie w Google dla czegoś takiego to: msdn FileInfo

Austin Salonen
źródło
7

Zwraca długość zawartości pliku

Thomas Levesque
źródło
4

Rozmiar na dysku może być inny, jeśli plik zostanie przeniesiony do innego systemu plików (FAT16, NTFS, EXT3 itp.)

Jak powiedzieli inni odpowiadający, da ci to rozmiar w bajtach, a nie rozmiar na dysku.

Charlie Salts
źródło
0

Właściwość Length klasy FileInfo zwraca rozmiar pliku (a nie rozmiar na dysku). Jeśli chcesz sformatowanego rozmiaru pliku (tj. 15 KB) zamiast długiej bajtu, możesz użyć CSharpLib , pakietu, który stworzyłem, który dodaje więcej funkcji do klasy FileInfo. Oto przykład:

using CSharpLib;
FileInfo info = new FileInfo("sample.txt");
Console.WriteLine(info.FormatBytes());  // Output: 15 MB
S. Ferrell
źródło