Wie erhält man die Dateigröße in C #?


307

Ich brauche eine Möglichkeit, die Größe einer Datei mit C # zu ermitteln, und nicht die Größe auf der Festplatte. Wie ist das möglich?

Derzeit habe ich diese Schleife

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

Gibt dies die Größe oder die Größe auf der Festplatte zurück?


Verwandte, aber für VB.NET: Bestimmen der Dateigröße in VB.NET ,
Peter Mortensen

Antworten:



386

Wenn Sie bereits einen Dateipfad als Eingabe haben, benötigen Sie folgenden Code:

long length = new System.IO.FileInfo(path).Length;

1
Umgeben Sie es mit dem try / catch-Block und überprüfen Sie alle möglichen Ausnahmen wie hier beschrieben : SecurityException, UnauthorizedAccessException, PathTooLongException, NotSupportedException und - abhängig von Ihrem Anwendungsfall - ArgumentNullException und ArgumentException
huha

37

FileInfo.Lengthwird den Trick machen (pro MSDN gibt es "[g] ets die Größe der aktuellen Datei in Bytes.") Es gibt eine schöne Seite über MSDN zu allgemeinen E / A-Aufgaben.




4

Die Größe der Festplatte kann unterschiedlich sein, wenn Sie die Datei in ein anderes Dateisystem verschieben (FAT16, NTFS, EXT3 usw.).

Wie andere Antwortende bereits gesagt haben, erhalten Sie die Größe in Byte und nicht die Größe auf der Festplatte.


0

Die Length-Eigenschaft der FileInfo-Klasse gibt die Größe der Datei zurück (nicht die Größe auf der Festplatte). Wenn Sie eine formatierte Dateigröße (dh 15 KB) anstelle eines Long-Byte-Werts wünschen , können Sie CSharpLib verwenden , ein Paket, das ich erstellt habe und das der FileInfo-Klasse mehr Funktionen hinzufügt. Hier ist ein Beispiel:

using CSharpLib;
FileInfo info = new FileInfo("sample.txt");
Console.WriteLine(info.FormatBytes());  // Output: 15 MB
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.