-->

某些扩展的Directory.GetFiles(Directory.GetFiles of cert

2019-06-21 01:31发布

有没有一种方法来简化这个LINQ表达式,或者是有这样做的更好的办法?

Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
         .Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||
                     s.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) ||
                     s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) ||
                     ...);

基本上我想返回特定扩展名的所有文件。 不幸的是,这种方法不是很灵活。 我宁愿能扩展添加到列表中,并有Directory.GetFiles返回这些扩展。 那可能吗?

Answer 1:

如果你想你做滤波,LINQ,你可以做这样的:

var ext = new List<string> {".jpg", ".gif", ".png"};
var myFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
     .Where(s => ext.Contains(Path.GetExtension(s)));

现在ext包含了允许扩展名列表; 你可以添加或删除其项目所必需的灵活的过滤。



Answer 2:

未在Directory.GetFiles(String, String)过载已经做到这一点? 你会只是做Directory.GetFiles(dir, "*.jpg", SearchOption.AllDirectories)

如果你想将它们放在一个列表,然后只需更换"*.jpg"与在一个列表进行迭代,并汇总结果为总的结果集的变量。 远远高于单独去指定清晰。 =)

就像是...

foreach(String fileExtension in extensionList){
    foreach(String file in Directory.GetFiles(dir, fileExtension, SearchOption.AllDirectories)){
        allFiles.Add(file);
    }
}

(如果您的目录很大,使用EnumerateFiles代替GetFiles有可能成为更有效)



Answer 3:

我只用一条线之所为

List<string> imageFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
      .Where(file => new string[] { ".jpg", ".gif", ".png" }
      .Contains(Path.GetExtension(file)))
      .ToList();


文章来源: Directory.GetFiles of certain extension