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

JL.*_*JL. 270 c# filesize

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

目前我有这个循环

foreach (FileInfo file in downloadedMessageInfo.GetFiles())
{
    //file.Length (will this work)
}
Run Code Online (Sandbox Code Playgroud)

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

liv*_*ove 346

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

long length = new System.IO.FileInfo(path).Length;
Run Code Online (Sandbox Code Playgroud)

  • 用 try/catch 块包围它,并按照[此处](https://docs.microsoft.com/en-us/dotnet/api/system.io.fileinfo.-ctor)所述检查所有可能的异常:SecurityException、UnauthorizedAccessException、 PathTooLongException、NotSupportedException 和 - 取决于您的用例 - ArgumentNullException 和 ArgumentException (4认同)

Mar*_*uła 294

FileInfo.Length 将返回文件的长度,以字节为单位(不是磁盘上的大小),所以这就是你要找的东西,我想.

  • 另外:http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/85bf76ac-a254-41d4-a3d7-e7803c8d9bc3这是关于如何获得"其他值"的讨论,这是大小在磁盘上. (4认同)
  • 没有方法“FileInfo.Length”!请记住您指定了静态方法的调用。真正的答案是“new FileInfo(path).Length”,这对于大规模操作来说可能很重。 (4认同)
  • FWIW @Vincent - 是和否。 [`FileInfo.Length`](https://docs.microsoft.com/en-us/dotnet/api/system.io.fileinfo.length?view=net-5.0) 是如何文档指的是属性,即使它不是静态的。答案与相关代码有关。考虑一下人们通常如何进行“批量操作” - 通过目录信息:`... new DirectoryInfo(...).GetFiles();` 为您创建了一个 `FileInfo` 的集合。获取所有这些文件的“长度”是轻量级的。 (2认同)
  • @Viincent - *“名称可以自动生成(例如“pic15.jpg”,“pic16.jpg”...) - 然后您每次都需要调用 FileInfo。“* 对于“批量操作”来说,这几乎从来没有必要。将所有文件路径的目录路径提取到“HashSet”中。**我很想知道一个给出文件长度的静态方法。你在什么环境中,有“FileInfo.GetLength”?** Google 和 Intellisense 都没有给我任何**静态**成员的点击,无论是“File”还是“FileInfo”,它给出了文件长度。 (2认同)

jas*_*son 36

FileInfo.Length将会发挥作用(根据MSDN,它"[g]说明当前文件的大小,以字节为单位.")在MSDN上有一个关于常见I/O任务的好页面.


Aus*_*nen 10

MSDN FileInfo.Length说它是"以字节为单位的当前文件的大小".

我在Google上搜索的典型代码是: msdn FileInfo


Tho*_*que 8

它返回文件内容长度


S. *_*ell 7

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

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