У меня есть папка со слишком многими файлами в, и я хочу пройти каждый файл один за другим. Проблемой является тот Каталог. GetFiles возвращает завершенный массив, и это занимает слишком много времени.
У меня был бы объект, на который я указал бы на папку, затем вызвал бы функцию, которая возвращает меня следующий файл в папке..NET имеет класс как это?
(Я предпочел бы избегать win32 interops, поскольку я планирую использовать это на Моно также.)
Большое спасибо.
Вы не можете сделать это в .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.
Взгляните на проект FastDirectoryEnumerator на веб-сайте CodeProject.
Он делает именно то, что вам нужно, и даже больше, я смог успешно использовать его в медленной сетевой папке с большим количеством файлов, и производительность была просто отличной.
Недостаток - он использует взаимодействие, поэтому его нельзя переносить на Mono.