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

本文关键字:条件 文件 何使用 GetFiles 方法 搜索 | 更新日期: 2023-09-27 17:57:16

下面的代码显然在目录中搜索包含"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"]);

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

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();
}

GetFiles方法不支持多个搜索条件,但有一种简单的方法可以解决此限制。为每个文件扩展名运行一个 getFile,然后将返回的数组"合并"到一个List<>中。然后使用 List 的 ToArray 方法将 List "转换"回 Array。我使用了这种方法,它对我有用代码如下(不要忘记引用"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();