0

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

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"]);
4

2 回答 2

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();
}
于 2011-05-19T15:35:23.080 回答
1

GetFiles方法不支持多个搜索条件,但是有一种简单的方法可以绕过这个限制。为每个文件扩展名运行一个 getFile,然后将返回的数组“合并”到一个List<>. 然后使用列表的 ToArray 方法将列表“转换”回数组。我使用了这种方法,它对我有用代码如下(不要忘记引用“using 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();
于 2011-09-26T18:13:31.207 回答