2011-05-05 81 views

回答

3

最有效的方法,我相信(扫描目录只有一次,并产生而不需要先建立起来的整个列表)的结果是这样的:

var extensions = new[] {".jpg", ".tif"}; 
var files = from f in Directory.EnumerateFiles(folderPath) 
      where extensions.Contains(Path.GetExtension(f)) 
      select f; 

当然,如果你需要循环的结果比一旦它可能是最好的结果存储在一个列表反正更多。

+1

一个更优雅和可读的解决方案!我最喜欢它。 :d – 2011-05-05 22:27:15

0

试试这个:

var sourceFolder = "C:\\"; 
var filters = "*.tif|*.jpg"; 
var files = filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter)).ToArray(); 

其中sourceFolder是通向要从中选择文件的文件夹。

2

如果你想自己筛选和要做足OS再次遍历目录节点,那么你可以做

 string[] extensionFilters = new string[] { ".jpg", ".tif" }; 

     string[] filtered = Directory.GetFiles("C:\\", "*.*") 
          .Where(filename => extensionFilters.Any(x => 
            filename.EndsWith(x, StringComparison.OrdinalIgnoreCase))) 
          .ToArray(); 
相关问题