Что если DirectoryInfo.GetFiles (). Длина превышает Int32.MaxValue? - PullRequest
8 голосов
/ 22 сентября 2010

По другому вопросу о максимальном количестве файлов в папке я заметил что

 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, элегантным и эффективным способом?

примечание: это не вопрос почему. и я знаю, это много файлов;)

1 Ответ

6 голосов
/ 22 сентября 2010

В Array есть свойство LongLength, которое возвращает длину как long.В любом случае, если GetFiles вернет больше, чем Int32.MaxValue предметов, у вас все равно будут проблемы ... как OutOfMemoryException;)

Когда вам на самом деле не нужно количество предметов, я предлагаювместо этого используйте метод EnumerateFiles (введен в 4.0).Он не извлекает все имена файлов в памяти одновременно, а извлекает их одно за другим

...