XSL*_*XSL 50 c# linq directory getfiles
有没有办法简化这个linq表达式,还是有更好的方法来做到这一点?
Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||
s.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) ||
s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) ||
...);
Run Code Online (Sandbox Code Playgroud)
基本上我想返回某个扩展名的所有文件.不幸的是,这种方法不是很灵活.我宁愿能够在列表中添加扩展名,并让Directory.GetFiles返回这些扩展名.那可能吗?
das*_*ght 97
如果您想在LINQ中进行过滤,可以这样做:
var ext = new List<string> {".jpg", ".gif", ".png"};
var myFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(s => ext.Contains(Path.GetExtension(s)));
Run Code Online (Sandbox Code Playgroud)
现在ext包含允许的扩展名列表; 您可以根据需要添加或删除项目以进行灵活过滤.
Tyl*_*Lee 14
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);
}
}
Run Code Online (Sandbox Code Playgroud)
(如果您的目录很大,使用EnumerateFiles而不是GetFiles可能更有效)
小智 5
我会只用单行完成
List<string> imageFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(file => new string[] { ".jpg", ".gif", ".png" }
.Contains(Path.GetExtension(file)))
.ToList();
Run Code Online (Sandbox Code Playgroud)