使用多个搜索字符串获取指定目录中的文件

这两天在乱写一个小程序,其中一个功能要获取指定目录中的文件.
这个功能大家一看想必就知道怎么写了. Directory.GetFiles 方法嘛
 
名称说明
Directory.GetFiles (String) 返回指定目录中的文件的名称。由 .NET Compact Framework 支持。
Directory.GetFiles (String, String) 返回指定目录中与指定搜索模式匹配的文件的名称。由 .NET Compact Framework 支持。
Directory.GetFiles (String, String, SearchOption) 返回指定目录中文件的名称,该目录与指定搜索模式匹配并使用某个值确定是否在子目录中搜索。

之前没了解或不熟悉的猿儿们自己再去MSDN资源库复习一遍吧.
现在又有了新的需求.RT. 我想通过多个搜索字符串筛选文件. 举例: 我想同时筛选mp3和jpg的图片.要怎么办呢?
 
刚开始我想到的是 声明一个搜索字符串集合,循环此集合,根据搜索字符串筛选添加. 示例代码:
const string strFolderPath = "D:\\fuckgfw";
var lstFiles = new List<string>();
var lstFilters = new List<string>{ "*.mp3", "*.jpg" }; foreach (var filter in lstFilters){ lstFiles.AddRange(Directory.GetFiles(strFolderPath, filter)); }

接着又想到的是 声明一个扩展名集合,循环获取指定目录所有文件.

判断扩展名集合是否包含文件扩展名匹配筛选. 示例代码:

var lstExtensions = new List<string>{ ".mp3", ".jpg" };
var lstFiles = Directory.GetFiles(strFolderPath).Where(file => lstExtensions.Contains(Path.GetExtension(file))).ToList();

后来又google了下.搜到了在stackoverflow上一个人的提问.

看了下提问日期:2008-10-02. 心里那个汗啊...大多数人赞同的结果是:

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

由于大小写的问题,下面有人补充. 转小写或者忽略大小写...

s.ToLower().Endswith... 或者 s.EndsWith(".mp3", StringComparison.OrdinalIgnoreCase)

原文链接:Can you call Directory.GetFiles() with multiple filters?

以上代码均未编译测试....

另说这个标题命名让我十分纠结,现在这个读起来感觉想当别扭..又没想到可读性强的.暂定吧

欢迎指出错误,交流学习.

posted @ 2013-03-21 23:25  mr3  阅读(1638)  评论(0编辑  收藏  举报