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

Posted

技术标签:

【中文标题】DirectoryInfo.GetFiles,如何在 C# 中获取不同类型的文件【英文标题】:DirectoryInfo.GetFiles, How to get different types of files in C# 【发布时间】:2013-02-04 08:48:57 【问题描述】:

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

当我尝试这段代码时:

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

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

【问题讨论】:

看看这个,也许它对你有帮助。 ***.com/questions/163162/… 试试这个链接:beansoftware.com/ASP.NET-FAQ/… 【参考方案1】:

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

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

【讨论】:

漂亮而简单。我最喜欢的选择。【参考方案2】:

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

看看这些问题;

GetFiles with multiple extensions Can you call Directory.GetFiles() with multiple filters?

【讨论】:

【参考方案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();

【讨论】:

以上是关于DirectoryInfo.GetFiles,如何在 C# 中获取不同类型的文件的主要内容,如果未能解决你的问题,请参考以下文章

C#遍历文件夹及文件

c#遍历文件夹获得所有文件

如何从为目录列表打开的目录中获取文件?

C#返回位于其中包含文件夹的目录中的所有文件[重复]

共享文件夹(局域网)报错:The username or password is incorrect

ByteDance字节跳动张一鸣:如何阅读如何了解自己如何与人沟通沟通如何安排时间如何正确的看待别人意见如何激励自己如何写作如何坚持锻炼身体如何耐心?...