该earlier SO question讨论如何检索与多个扩展名中的一个相匹配的目录树中的所有文件。高效检索和过滤文件
例如。检索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)?
对于数量巨大的文件,理想情况是GetFiles()接受多个过滤器,然后遍历整个目录树,逐个文件地遍历(无论如何),回调给每个匹配提供的方法。反正好点。 – Ash 2009-02-12 13:29:16