【问题标题】:DirectoryInfo.GetFiles, How to get different types of files in C#DirectoryInfo.GetFiles,如何在 C# 中获取不同类型的文件
【发布时间】:2013-02-04 08:48:57
【问题描述】:
如何在 C# 中使用 DirectoryInfo.GetFiles 函数找到 *.gif 和 *.jpg 两种文件类型?
当我尝试这段代码时:
string pattern = "*.gif|*.jpg";
FileInfo[] files = dir.GetFiles(pattern);
“路径中的非法字符”例外。被抛出。
【问题讨论】:
标签:
c#
file
search
filter
directory
【解决方案1】:
没有办法组合成一个字符串模式,你必须将模式存储在一个列表中:
var extensions = new[] { "*.gif", "*.jpg" };
var files = extensions.SelectMany(ext => dir.GetFiles(ext));
【解决方案2】:
你不能那样做。您需要使用GetFiles() 方法中的每一个。或者您可以为您的扩展使用一个数组,然后检查每个扩展,但您仍然需要多次使用此方法。
看看这些问题;
【解决方案3】:
您不能在查询中指定多个模式,您需要有一个扩展列表并为每个扩展调用GetFiles。比如……
var exts = new string[] { "*.gif", "*.jpg" };
foreach (var ext in exts) {
var files = dir.GetFiles(ext);
}
您可以使用完整的通配符 *.* 一次获取所有文件并手动过滤它们,但根据目录及其内容,这样做的性能可能会成为问题。
【解决方案4】:
您可以在以下代码的 where 子句中添加任意数量的扩展。
DirectoryInfo directoryInfo = new DirectoryInfo(filePath);
FileInfo[] files = directoryInfo.GetFiles().Where(f => f.Extension == ".gif" || f.Extension == ".jpg").ToArray();