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

Posted

技术标签:

【中文标题】如何在 C# 中获取文件大小?【英文标题】:How do you get the file size in C#? 【发布时间】:2010-11-25 17:38:07 【问题描述】:

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

目前我有这个循环

foreach (FileInfo file in downloadedMessageInfo.GetFiles())

    //file.Length (will this work)

这会返回磁盘上的大小或大小吗?

【问题讨论】:

相关,但对于 VB.NET:Determining file size in VB.NET, 【参考方案1】:

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

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

【讨论】:

用 try/catch 块包围它并检查所有可能的异常,如 here 所述:SecurityException、UnauthorizedAccessException、PathTooLongException、NotSupportedException 和 - 取决于您的用例 - ArgumentNullException 和 ArgumentException【参考方案2】:

FileInfo.Length 将返回文件的长度,以字节为单位(不是磁盘上的大小),所以我认为这就是您要查找的内容。

【讨论】:

另外:social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/… 这是关于如何获取“其他值”的讨论,即磁盘上的大小。 没有方法“FileInfo.Length”!请记住,您指定了静态方法的调用。真正的答案是new FileInfo(path).Length 对于大规模操作来说可能很重。 FWIW @Vincent - 是和否。FileInfo.Length 是文档引用属性的方式,即使它不是静态的。答案与所讨论的代码有关。考虑一下通常如何进行“大规模操作” - 通过目录信息:... new DirectoryInfo(...).GetFiles(); 为您创建 FileInfos 的集合。获取所有这些文件的Length 是轻量级的。 @ToolmakerSteve:MS 文档是众所周知的垃圾,不要将其称为“正常方式”。新手看到对静态方法的调用会感到困惑,而且显然它不存在。 GetFiles() 只是获取文件列表的方法之一。名称可以自动生成(例如“pic15.jpg”、“pic16.jpg”...) - 然后您每次都需要调用 FileInfo。在任何情况下,操作系统都会保留目录缓存,并且获取长度不能像“创建对象”那样进行繁重的操作 - 可以通过像 FileInfo.GetLength(string fileName) 这样的调用直接获取长度。它更方便,适合许多休闲任务。 @Viincent - “名称可以自动生成(例如“pic15.jpg”、“pic16.jpg”...) - 那么您每次都需要调用 FileInfo。” 对于“大规模行动”而言,这几乎是不必要的。将所有文件路径的目录路径提取到HashSet我很想知道一个给出文件长度的静态方法。你在什么环境中,有FileInfo.GetLength Google 和 Intellisense 都没有给我任何 static 成员,FileFileInfo,提供文件长度。【参考方案3】:

FileInfo.Length 可以解决问题(根据 MSDN,它“[g] 设置当前文件的大小,以字节为单位。”)在 MSDN 上有一个很好的 page 用于常见 I/O 任务。

【讨论】:

【参考方案4】:

MSDN FileInfo.Length 表示它是“当前文件的大小,以字节为单位。”

我对类似内容的典型 Google 搜索是:msdn FileInfo

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

返回文件内容长度

【讨论】:

【参考方案7】:

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

正如其他回答者所说,这会给你以字节为单位的大小,而不是磁盘上的大小。

【讨论】:

以上是关于如何在 C# 中获取文件大小?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何从Tao库中获取OpenGL中生成的对象的大小

如何使用 SharpSvn 获取文件大小?

C#获取response传输的数据大小

C# 获取文件大小

如何在 ASP.NET C# 中上传 10GB+ 大小的文件

获取具有未知文件格式的磁盘和/或驱动器的大小,C# .NET Framework?