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?

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

Antworten:

324

FileInfo.Length gibt die Länge der Datei in Bytes zurück (nicht die Größe auf der Festplatte), also ist dies das, wonach Sie suchen, denke ich.

Marcin Deptuła
quelle
4
Außerdem: social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/… Dies ist eine Diskussion darüber, wie man "den anderen Wert" erhält, dh die Größe auf der Festplatte.
Marcin Deptuła
386

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

long length = new System.IO.FileInfo(path).Length;
Live-Liebe
quelle
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.

Jason
quelle
11

MSDN FileInfo.Length gibt an, dass es "die Größe der aktuellen Datei in Bytes" ist.

Meine typische Google-Suche nach so etwas lautet: msdn FileInfo

Austin Salonen
quelle
7

Es gibt die Länge des Dateiinhalts zurück

Thomas Levesque
quelle
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.

Charlie Salts
quelle
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
S. Ferrell
quelle