DirectoryInfo.GetFiles,如何在C#中获取不同类型的文件

如何在C#中使用DirectoryInfo.GetFiles函数找到文件类型* .gif和* .jpg?

当我尝试这段代码时:

 string pattern = "*.gif|*.jpg"; FileInfo[] files = dir.GetFiles(pattern); 

例外“路径中的非法字符”。 被抛出。

你不能这样做。 您需要使用GetFiles()方法中的每一个。 或者您可以使用数组作为扩展,然后检查它们中的每一个,但是您仍然需要多次使用此方法。

看看这些问题;

  • 具有多个扩展名的GetFiles
  • 你能用多个filter调用Directory.GetFiles()吗?

这是无法组合成一个字符串模式,您必须将模式存储在列表中:

 var extensions = new[] { "*.gif", "*.jpg" }; var files = extensions.SelectMany(ext => dir.GetFiles(ext)); 

您不能在查询中指定多个模式,您需要有一个扩展列表并为每个模式调用GetFiles 。 例如…

 var exts = new string[] { "*.gif", "*.jpg" }; foreach (var ext in exts) { var files = dir.GetFiles(ext); } 

您可以使用*.*的完整通配符一次获取所有文件并手动过滤它们,但这可能是一个问题,具体取决于目录及其内容。

您可以在以下代码的where子句中添加任意数量的扩展名。

 DirectoryInfo directoryInfo = new DirectoryInfo(filePath); FileInfo[] files = directoryInfo.GetFiles().Where(f => f.Extension == ".gif" || f.Extension == ".jpg").ToArray();