如何在 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();
为您创建 FileInfo
s 的集合。获取所有这些文件的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 成员,File
或 FileInfo
,提供文件长度。【参考方案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# 中获取文件大小?的主要内容,如果未能解决你的问题,请参考以下文章