Этот ранее SO вопрос говорит о том, как извлечь все файлы в дереве каталогов, которые соответствуют одному из нескольких расширений.
например. Получить все файлы в C: \ и все подкаталоги, соответствующие * .log, * .txt, * .dat.
Принятый ответ был таким:
var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));
Это кажется мне совершенно неэффективным. Если вы выполняли поиск в дереве каталогов, которое содержит тысячи файлов (оно использует SearchOption.AllDirectories), каждый отдельный файл в указанном дереве каталогов загружается в память, и только после этого удаляются несоответствия. (Напоминает мне о «пейджинге», предлагаемом сетями данных ASP.NET.)
К сожалению, стандартный метод System.IO.DirectoryInfo.GetFiles принимает только один фильтр за один раз.
Это может быть просто недостаток знания Linq, неужели это неэффективно, как я упоминал?
Во-вторых, есть ли более эффективный способ сделать это как с Linq, так и без него (без использования нескольких вызовов GetFiles)?