Есть ли у Directory.GetFiles один файл за раз? (.СЕТЬ) - PullRequest
11 голосов
/ 19 февраля 2010

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 19 февраля 2010

Вы не можете сделать это в .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.

1 голос
/ 26 февраля 2010

Посмотрите на FastDirectoryEnumerator проект на веб-сайте CodeProject.

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

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

...