GetFiles 具有多个扩展名
如何过滤多个扩展名?
我尝试过:
FileInfo[] Files = dinfo.GetFiles("*.jpg;*.tiff;*.bmp");
FileInfo[] Files = dinfo.GetFiles("*.jpg,*.tiff,*.bmp");
Possible Duplicate:
Can you call Directory.GetFiles() with multiple filters?
How do you filter on more than one extension?
I've tried:
FileInfo[] Files = dinfo.GetFiles("*.jpg;*.tiff;*.bmp");
FileInfo[] Files = dinfo.GetFiles("*.jpg,*.tiff,*.bmp");
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我不确定这是否可能。 MSDN GetFiles 参考表示搜索模式,而不是搜索模式列表。
我可能倾向于单独获取每个列表并将它们“foreach”到最终列表中。
I'm not sure if that is possible. The MSDN GetFiles reference says a search pattern, not a list of search patterns.
I might be inclined to fetch each list separately and "foreach" them into a final list.
我知道有一种更优雅的方法可以做到这一点,并且我愿意接受建议......这就是我所做的:
I know there is a more elegant way to do this and I'm open to suggestions... this is what I did:
为什么不创建一个扩展方法呢?这样更具可读性。
编辑:更有效的版本:
用法:
Why not create an extension method? That's more readable.
EDIT: a more efficient version:
Usage:
您可以获取每个文件,然后过滤数组:
这将(稍微)比此处的所有其他答案更快。
在 .Net 3.5 中,将
EnumerateFiles
替换为GetFiles
(速度较慢)。并像这样使用它:
You can get every file, then filter the array:
This will be (marginally) faster than every other answer here.
In .Net 3.5, replace
EnumerateFiles
withGetFiles
(which is slower).And use it like this:
您不能这样做,因为
GetFiles
只接受单个搜索模式。相反,您可以不带任何模式调用GetFiles
,并在代码中筛选结果:如果您使用的是 .NET 4,则可以使用
EnumerateFiles
方法来避免加载内存中的所有 FileInfo 对象一次:You can't do that, because
GetFiles
only accepts a single search pattern. Instead, you can callGetFiles
with no pattern, and filter the results in code:If you're working with .NET 4, you can use the
EnumerateFiles
method to avoid loading all FileInfo objects in memory at once:您可以使用 LINQ Union 方法:
You can use LINQ Union method:
下面的代码检索 jpg、tiff 和 bmp 文件,并为您提供一个可以迭代的
IEnumerable
:如果您确实需要一个数组,只需粘贴
.ToArray()
在本文的最后。The following retrieves the jpg, tiff and bmp files and gives you an
IEnumerable<FileInfo>
over which you can iterate:If you really need an array, simply stick
.ToArray()
at the end of this.