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

发布于 2024-11-08 23:30:44 字数 441 浏览 0 评论 0原文

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

The code below obviously searches a directory for Files that contain the word "FINAL" but what I'm wondering is can I add to its search criteria? I have a Well_Name and Actual_Date strings that I would like to search for in the File names in addition to the "FINAL" word. Thoughts? Thanks in advance.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

对风讲故事 2024-11-15 23:30:44
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();
}
var files = myDir.GetFileInfo()
                 .Where(f => f.FileName.Contains("FINAL") ||
                             f.FileName.Contains(drow["Well_Name"].ToString()) ||
                             f.FileName.Contains(drow["Actual_Date"]));

Since GetFiles() returns an Enumerable Collection of FileInfo you can just check all of the file names for the criteria that you want.

If you want to get really generic on this you could write a function that looks like this

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();
}
短叹 2024-11-15 23:30:44

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

GetFiles method does not support multiple search criteria, but there is a simple way around this limitation. Run a getFile for each file extension, and then "merge" returned arrays into a List<>. Then use a List's ToArray method to "convert" a List back to an Array.
I used this approach, and it works for me
The code is below (do not forget to reference "using System.Collections.Generic;" namespace):

// 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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文