8

如何使用DirectoryInfo.GetFilesC# 中的函数找到 *.gif 和 *.jpg 两种文件类型?

当我尝试这段代码时:

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

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

4

4 回答 4

13

没有办法组合成一个字符串模式,您必须将模式存储在列表中:

var extensions = new[] { "*.gif", "*.jpg" };
var files = extensions.SelectMany(ext => dir.GetFiles(ext));
于 2013-02-19T15:50:10.160 回答
3

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

看看这些问题;

于 2013-02-19T15:48:53.750 回答
1

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

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

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

于 2013-02-19T15:45:40.007 回答
0

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

DirectoryInfo directoryInfo = new DirectoryInfo(filePath);
FileInfo[] files = directoryInfo.GetFiles().Where(f => f.Extension == ".gif" || f.Extension == ".jpg").ToArray();
于 2017-01-03T09:57:46.623 回答