想要使用C#列出文件夹中的所有图像文件

时间:2010-11-08 13:30:48

标签: c#

  

可能重复:
  GetFiles with multiple extentions

是否有类似GetFiles的函数,它需要多于1个文件类型,如

DirectoryInfo di = new DirectoryInfo("c:/inetpub/wwwroot/demos");
FileInfo[] rgFiles = di.GetFiles("*.bmp, *.jpg, etc");

5 个答案:

答案 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);