下面的代码显然会在目录中搜索包含单词“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"]);
答案 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();