如何收集文件夹及其与字符串匹配的子文件夹中的所有文件

在C#中,如何搜索文件夹及其子文件夹以查找与字符串值匹配的文件。 我的字符串值可能是“ABC123”,匹配的文件可能是ABC123_200522.tif。 arrays可以收集这些吗? 提前致谢。

-Josh

void DirSearch(string sDir) { try { foreach (string d in Directory.GetDirectories(sDir)) { foreach (string f in Directory.GetFiles(d, sMatch)) { lstFilesFound.Add(f); } DirSearch(d); } } catch (System.Exception excpt) { Console.WriteLine(excpt.Message); } 

其中sMatch是搜索内容的标准。

您正在寻找Directory.GetFiles方法 :

 Directory.GetFiles(path, "*" + search + "*", SearchOption.AllDirectories) 

如果匹配要求很简单,请尝试:

 string[] matchingFiles = System.IO.Directory.GetFiles( path, "*ABC123*" ); 

如果它们需要更复杂的东西,你可以使用正则表达式(和LINQ):

 string[] allFiles = System.IO.Directory.GetFiles( path, "*" ); RegEx rule = new RegEx( "ABC[0-9]{3}" ); string[] matchingFiles = allFiles.Where( fn => rule.Match( fn ).Success ) .ToArray(); 
  DirectoryInfo di = new DirectoryInfo("c:/inetpub/wwwroot/demos"); FileInfo[] rgFiles = di.GetFiles("*.aspx"); 

你可以为选项传递第二个参数。 此外,您可以使用linq进一步过滤结果。

在这里查看MSDN文档

从记忆中可能需要调整

 class Test { ArrayList matches = new ArrayList(); void Start() { string dir = @"C:\"; string pattern = "ABC"; FindFiles(dir, pattern); } void FindFiles(string path, string pattern) { foreach(string file in Directory.GetFiles(path)) { if( file.Contains(pattern) ) { matches.Add(file); } } foreach(string directory in Directory.GetDirectories(path)) { FindFiles(directory, pattern); } } }