如何使用GetFiles方法搜索文件(多个条件..)

时间:2011-05-19 15:31:34

标签: c# directoryinfo

下面的代码显然会在目录中搜索包含单词“FINAL”的文件,但我想知道的是我可以添加到其搜索条件吗?除了“FINAL”字之外,我还有一个Well_Name和Actual_Date字符串,我想在文件名中搜索。思考?提前谢谢。

DirectoryInfo myDir = new DirectoryInfo("C://DWGs");
var files = myDir.GetFiles("FINAL");

//Can I do something like this to add to my search criteria?
var files = myDir.GetFiles("FINAL" + 
                            drow["Well_Name"].ToString() + 
                            drow["Actual_Date"]);

2 个答案:

答案 0 :(得分:3)

var files = myDir.GetFileInfo()
                 .Where(f => f.FileName.Contains("FINAL") ||
                             f.FileName.Contains(drow["Well_Name"].ToString()) ||
                             f.FileName.Contains(drow["Actual_Date"]));

由于GetFiles()返回FileInfo的可枚举集合,您只需检查所需条件的所有文件名。

如果你想在这方面变得非常通用,你可以编写一个看起来像这样的函数

public IEnumerable<FileInfo> addCriteria(IEnumerable<FileInfo> FileList,
                                         List<String> searchCriteria)
{ 
   var newFileList = FileList;
   foreach(String criteria in searchCriteria)
   {
       newFileList = newFileList.Where(f => f.FileName.Contains(criteria).AsQueryable();
   }
   return newFileList.AsEnumerable();
}

答案 1 :(得分:1)

GetFiles方法不支持多个搜索条件,但有一种简单的方法可以解决此限制。为每个文件扩展名运行getFile,然后将返回的数组“合并”到List<>。然后使用List的ToArray方法将List“转换”回Array。 我使用这种方法,它适用于我 代码如下(不要忘记引用“使用System.Collections.Generic;”命名空间):

// Get the DirectoryInfo and FileInfo objects for aspx and html files.
FileInfo[] files_aspx = dir.GetFiles("*.aspx");
FileInfo[] files_html = dir.GetFiles("*.html");

List<FileInfo> files = new List<FileInfo>();
files.AddRange(files_aspx);
files.AddRange(files_html);
files.ToArray();