Имейте Каталог. GetFiles возвращают один файл за один раз? (.NET)

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

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

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

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

11
задан billpg 19 February 2010 в 10:10
поделиться

2 ответа

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

8
ответ дан 3 December 2019 в 10:25
поделиться

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

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

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

1
ответ дан 3 December 2019 в 10:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: