Подтвердить что ты не робот

Have Directory.GetFiles возвращает один файл за раз? (.СЕТЬ)

У меня есть папка с слишком большим количеством файлов, и я хочу просматривать каждый файл по одному. Проблема в том, что Directory.GetFiles возвращает завершенный массив, и это занимает слишком много времени.

Я предпочел бы иметь объект, который я бы указал на папку, а затем вызвать функцию, которая возвращает мне следующий файл в папке. Есть ли у .NET класс, подобный этому?

(Я бы предпочел избегать перехватов win32, поскольку я планирую использовать это также в Mono.)

Большое спасибо.

4b9b3361

Ответ 1

Вы не можете сделать это в .NET 3.5, но вы можете в .NET 4.0, в соответствии с этим сообщением в блоге:

DirectoryInfo directory = new DirectoryInfo(@"\\share\symbols");
IEnumerable<FileInfo> files = directory.EnumerateFiles();
foreach (var file in files) {
    Console.WriteLine("Name={0}, Length={1}", file.Name, file.Length);
}

(Также существует статический метод Directory.EnumerateFiles.)

Я не знаю, переносился ли этот API в Mono еще.

Ответ 2

Взгляните на FastDirectoryEnumerator проект на веб-сайте CodeProject.

Он делает именно то, что вам нужно, и даже больше, я смог успешно использовать его на медленном сетевом ресурсе с большим количеством файлов, и производительность была просто великолепной.

Недостаток - он использует interop, поэтому он не может быть переносимым в Mono.