首页 / C#开发 / 正文

[C#].NET/C#应用程序开发中使用Directory.GetFiles()过滤多种文件扩展名类型有哪些方法?

13498 发布于: 2018-03-26 读完约需5分钟

问题描述

我们知道,在.NET/C#的程序开发中,可以通过Directory.GetFiles()方法获取到指定文件夹中所有的文件,同时,我们还可以指定一个需要过滤掉的文件类型的扩展名。但如何通过Directory.GetFiles()这个方法过滤掉多个文件类型的扩展名呢?
比如,我们需要过滤掉文件扩展名为*.mp3|*.jpg这两种文件,如:

Directory.GetFiles("C:\\path", "*.mp3|*.jpg", SearchOption.AllDirectories);
Directory.GetFiles("C:\\path", "*.mp3;*.jpg", SearchOption.AllDirectories);

.NET/C#应用程序开发中使用Directory.GetFiles()过滤多种文件扩展名类型有哪些方法呢?

方案一

在.NET 4.0 或者以上版本中,我们可以使用Directory.EnumerateFiles()方法来过滤多种文件类型,如下:

var files = Directory.EnumerateFiles("C:\\path", "*.*", SearchOption.AllDirectories)
            .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));

在.NET4.0 以前的版本中,我们可以使用如下方式:

var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories)
            .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));

方案二

我们也可以借助LINQSelectMany()方法来实现,如:

private static string[] GetFiles(string sourceFolder, string filters, System.IO.SearchOption searchOption)
{
   return filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter, searchOption)).ToArray();
}

方案三

我们也可以使用正则表达式来处理,如下:

var files = Directory.GetFiles("path_to_files").Where(file => Regex.IsMatch(file, @"^.+\.(wav|mp3|txt)$"));

方案四

或者使用如下的Contains()方法,如:

var set = new HashSet<string> { ".mp3", ".jpg" };
Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
         .Where(f => set.Contains(
             new FileInfo(f).Extension,
             StringComparer.OrdinalIgnoreCase));

或者

from file in Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
from ext in set
where String.Equals(ext, new FileInfo(file).Extension, StringComparison.OrdinalIgnoreCase)
select file;

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [JSON.NET].NET/C#应用程序中将一个键值对的JSON字符串反序列化成字典Dictionary<string,string>有哪些方法?

下一篇: # [.NET].NET/C#应用程序开发中比较两个字节数组(byte[])是否相同的方法有哪些呢?

本文永久链接码友网 » [C#].NET/C#应用程序开发中使用Directory.GetFiles()过滤多种文件扩展名类型有哪些方法?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册