2010-09-22 67 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

相關問題