如何在同一个电话中执行System.IO.Directory.GetFiles("*.tif")
和System.IO.Directory.GetFiles("*.jpg")
?
答案 0 :(得分:3)
我认为最有效的方式(仅扫描一次目录,并在没有首先构建整个列表的情况下产生结果)是这样的:
var extensions = new[] {".jpg", ".tif"};
var files = from f in Directory.EnumerateFiles(folderPath)
where extensions.Contains(Path.GetExtension(f))
select f;
当然,如果您需要多次循环结果,最好将结果存储在列表中。
答案 1 :(得分:2)
如果您想自己过滤,并且想要让操作系统再次遍历目录节点,那么您可以
string[] extensionFilters = new string[] { ".jpg", ".tif" };
string[] filtered = Directory.GetFiles("C:\\", "*.*")
.Where(filename => extensionFilters.Any(x =>
filename.EndsWith(x, StringComparison.OrdinalIgnoreCase)))
.ToArray();
答案 2 :(得分:0)
试试这个:
var sourceFolder = "C:\\";
var filters = "*.tif|*.jpg";
var files = filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter)).ToArray();
其中sourceFolder是您要从中选择文件的文件夹的路径。