您好,您可以使用我在http://msdn.microsoft.com/en-us/library/wz42302f.aspx 找到的社区内容。:
private static string[] GetFiles(string sourceFolder, string filters)
{
return filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter)).ToArray();
}
使用惰性评估的替代方法(仅限 .Net 4.0):
private static IEnumerable<string> GetFiles(string sourceFolder, string filters)
{
return filters.Split('|').SelectMany(filter => System.IO.Directory.EnumerateFiles(sourceFolder, filter));
}
您可以像GetFiles("dir", "*.jpg|*.gif|*.jpeg|*.bmp|*.png") 一样使用它。它本质上只是对每个过滤器的搜索,因此它没有尽可能高效。
最终版本是(仅是 .Net 4.0,但至少可以制成 2.0 解决方案):
private static IEnumerable<string> GetImageFiles(string sourceFolder)
{
return from file in System.IO.Directory.EnumerateFiles(sourceFolder)
let extension = Path.GetExtension(file)
where extension == ".jpg" || extension == ".gif" || extension == ".png"
select file;
}
我相信最后一个是最快的,因为它只循环一次。但这取决于Directory 中模式搜索的实现方式以及操作系统的搜索方式。需要进行性能测试,但我没有做过。