如何在C#中获取文件大小?


307

我需要一种方法来使用C#获取文件的大小,而不是磁盘上的大小。这怎么可能?

目前我有这个循环

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

这会返回大小还是磁盘上的大小?


相关,但对于VB.NET:在VB.NET中确定文件大小
Peter Mortensen

Answers:



386

如果您已经有文件路径作为输入,那么这是您需要的代码:

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

1
用try / catch块将其包围,并按此处所述检查所有可能的异常:SecurityException,UnauthorizedAccessException,PathTooLongException,NotSupportedException和-取决于您的用例
-ArgumentNullException

37

FileInfo.Length可以解决这个问题(对于MSDN,它“ [g]设置当前文件的大小,以字节为单位。”)。在MSDN上,有一个不错的页面介绍了常见的I / O任务。




4

如果将文件移动到另一个文件系统(FAT16,NTFS,EXT3等),则磁盘上的大小可能会有所不同

正如其他答复者所说,这将为您提供字节大小,而不是磁盘大小。


0

FileInfo类的Length属性返回文件的大小(而不是磁盘上的大小)。如果要格式化的文件大小(即15 KB)而不是长字节值,则可以使用CSharpLib,这是我制作的一个程序包,可以为FileInfo类添加更多功能。这是一个例子:

using CSharpLib;
FileInfo info = new FileInfo("sample.txt");
Console.WriteLine(info.FormatBytes());  // Output: 15 MB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.