2011-05-19 53 views
0

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

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

回答

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

@ msarchet-将GetFiles方法我在该目录中使用上述搜索子文件夹? – Josh 2011-05-19 18:32:03

1

GetFiles方法不支持多个搜索条件的功能,但绕过这个限制的简单方法。为每个文件扩展名运行getFile,然后将返回的数组“合并”为List<>。然后使用List的ToArray方法将List转换回数组。 我用这种方法,它为我的作品 的代码如下(不要忘了参考“使用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();