是否有类似GetFiles的函数,它需要多于1个文件类型,如
DirectoryInfo di = new DirectoryInfo("c:/inetpub/wwwroot/demos");
FileInfo[] rgFiles = di.GetFiles("*.bmp, *.jpg, etc");
答案 0 :(得分:9)
AFAIK,这不是直接可能的。
相反,您可以获取每个文件,然后过滤数组:
HashSet<string> allowedExtensions = new HashSet<string>(extensionArray, StringComparer.OrdinalIgnoreCase);
FileInfo[] files = Array.FindAll(dirInfo.GetFiles(), f => allowedExtensions.Contains(f.Extension));
extensionArray
必须在每个扩展程序之前包含.
,但不区分大小写。
答案 1 :(得分:5)
不是我知道的。 我实现了同样的问题:
DirectoryInfo di = new DirectoryInfo("c:/inetpub/wwwroot/demos");
FileInfo[] rgFiles = di.GetFiles("*.bmp")
.Union(di.GetFiles("*.jpg"))
.Union(di.GetFiles("etc"))
.ToArray();
请注意,这需要System.Linq
命名空间。
答案 2 :(得分:0)
答案 3 :(得分:0)
如果您希望您的代码在某种意义上是防弹,您的文件检测机制会检测到的图像文件不是基于扩展名,而是基于文件的性质,您必须加载你的文件为byte []并通常在数组的开头寻找一个神奇的字节跟踪。每个图形文件都有自己的方式,通过呈现字节的神奇值来向软件展示自己。如果您愿意,我可以发布一些代码示例。
答案 4 :(得分:0)
不,不是。 Windows无法在搜索模式中分隔过滤器。 不过,这可以通过LINQ手动完成。
通过使用EnumerateFiles,您可以在返回时获得结果,这样您就不必等待所有文件才能开始处理结果。
var directory = new DirectoryInfo("C:\\");
var allowedExtensions = new string[] { ".jpg", ".bmp" };
var imageFiles = from file in directory.EnumerateFiles("*", SearchOption.AllDirectories)
where allowedExtensions.Contains(file.Extension.ToLower())
select file;
foreach (var file in imageFiles)
Console.WriteLine(file.FullName);