栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

c#file过滤多种格式

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c#file过滤多种格式

问题描述

我们知道,在.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"));

方案二

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

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 { ".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;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906187.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号