如果 DirectoryInfo.GetFiles().Length 超过 Int32.MaxValue,会发生什么?

8

在另一个关于文件夹中最大文件数的问题中,我注意到:

 DirectoryInfo.GetFiles().Length

返回的是System.Int32类型,但Int32的最大值是

 2.147.483.647  (Int32.MaxValue) 

在NTFS(以及许多其他文件系统)上,最大文件数可以远远超过此限制。

在NTFS上,它是

 4.294.967.295 single files in one folder (probably an Uint32)

这让我想到一个有趣的问题:

当文件数量超过Int32.MaxValue时,是否有一种优雅且高效的方式使用.NET框架获取NTFS文件夹中的文件数量?

注意:这不是为什么的问题。我知道,那是很多文件;)


你真的有必要在一个文件夹中存储超过 int.MaxValue 个文件吗? - TalentTuner
1个回答

6

数组上有一个名为LongLength的属性,它返回一个long类型的长度。无论如何,如果GetFiles返回超过Int32.MaxValue个项目,你都会遇到问题……像OutOfMemoryException;)

当你实际上不需要知道文件数时,我建议使用EnumerateFiles方法(自4.0引入)。它不会一次性将所有文件名读入内存,而是一个一个地逐个读取。


那么我必须循环遍历一组In32.Max(或更少),并添加DirectoryInfo.EnumerateFiles().Count()的结果,就像一个优雅而温和的方式? - Caspar Kleijne
2
如果你只需要文件的数量(而不是文件名本身),那么使用EnumerateFiles可能会更有效率(并且会使用更少的内存)。 - Thomas Levesque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接