目录信息.GetFiles,如何在C#中获取不同类型的文件

本文关键字:获取 同类型 文件 信息 GetFiles | 更新日期: 2023-09-27 18:00:03

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

当我尝试这个代码时:

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

引发异常"路径中的非法字符。"。

目录信息.GetFiles,如何在C#中获取不同类型的文件

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

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

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

看看这些问题;

  • 具有多个扩展名的GetFiles
  • 你能打电话给目录吗。具有多个筛选器的GetFiles()

您不能在查询中指定多个模式,您需要有一个扩展列表,并为每个扩展调用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();

这个版本类似于cuongle的版本,只是它允许对文件扩展名进行一些操作,比如。ToLower(),因此扩展列表将在不考虑大写的情况下工作。我还用它来去除在文件扩展名之后添加的文本(例如Remove("''0",")。

var extensions = new HashSet<string> { ".gif", ".jpg" };
var files = dirInfo.GetFiles().Where(file => extensions.Contains(file.Extension.ToLower());