2010-09-22 66 views
8

通过另一question有关文件的文件夹中的最大数,我注意到 是如果DirectoryInfo.GetFiles()。长度超过Int32.MaxValue会怎么样?

DirectoryInfo.GetFiles().Length 

返回一个System.In32,但为Int32的最大值

2.147.483.647 (Int32.MaxValue) 

而上NTFS(许多其他文件系统)文件的最大数量可以远远超过这个数量。

在NTFS是

4.294.967.295 single files in one folder (probably an Uint32) 

这使我一个有趣的问题:

是否有可能得到的文件数量的文件夹在NTFS与.NET Framework,当文件数量超过Int32.MaxValue,以一种优雅和执行的方式?

注意:这不是为什么。我知道这些是很多文件;)

+0

您是否确实需要在文件夹中存储超过int.MaxValue文件? – TalentTuner 2010-09-22 12:23:26

回答

6

Array上有一个LongLength属性,它返回长度为long。无论如何,如果GetFiles回报超过Int32.MaxValue项目,你将有问题反正...就像一个OutOfMemoryException;)

当你实际上并不需要的物品的数量,我建议你使用EnumerateFiles方法,而不是(在介绍4.0)。它并不是一次抓取内存中的所有文件名,而是逐个抓取它们

+0

所以我必须循环槽In32.Max集(或更少),并添加DirectoryInfo.EnumerateFiles()。Count()的结果,像一个很好和温和的方式? – 2010-09-22 12:29:41

+2

如果你只想要文件的数量(不是文件名本身),是的,EnumerateFiles可能会更有效率(并且会使用更少的内存) – 2010-09-22 12:43:08

相关问题