Directory.GetFiles的某些扩展
有没有办法简化这个linqexpression式,还是有更好的方法呢?
Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) || ...);
基本上我想返回一个特定扩展名的所有文件。 不幸的是,这种方法不是很灵活。 我宁愿能够向列表添加扩展,并让Directory.GetFiles返回这些扩展。 那可能吗?
如果你想在LINQ中做你的过滤,你可以这样做:
var ext = new List<string> {"jpg", "gif", "png"}; var myFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(s => ext.Contains(Path.GetExtension(s)));
现在ext
包含允许的扩展名列表; 您可以根据需要添加或删除项目以进行灵活的过滤。
Directory.GetFiles(String, String)
超载已经做到了吗? 你只需要做Directory.GetFiles(dir, "*.jpg", SearchOption.AllDirectories)
如果你想把它们放在一个列表中,那么用一个迭代列表的variablesreplace"*.jpg"
,然后将结果集合到一个整体结果集中。 比单独指定它们要清楚得多。 =)
就像是…
foreach(String fileExtension in extensionList){ foreach(String file in Directory.GetFiles(dir, fileExtension, SearchOption.AllDirectories)){ allFiles.Add(file); } }
(如果你的目录很大,使用EnumerateFiles
代替GetFiles
可能会更有效率)
我会完成像只使用单行
List<string> imageFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(file => new string[] { ".jpg", ".gif", ".png" } .Contains(Path.GetExtension(file))) .ToList();