如何递归搜索具有多个通配符的目录?

使用C#(.NET),如何在给定目录搜索掩码的情况下搜索文件系统,如下所示:(?)

\\server\Scanner\images\*Images\*\*_* 

例如,我需要先找到所有顶级目录:

 \\server\Scanner\images\Job1Images \\server\Scanner\images\Job2Images 

…然后我需要继续进行搜索掩码:

 \\server\Scanner\images\Job1Images\*\*_* \\server\Scanner\images\Job2Images\*\*_* 

这似乎并不太复杂,但我无法弄清楚我的生活……

如上所述,我正在使用C#和.NET。 搜索可以尝试查找目录或文件。 (即* .txt或)

像这样:

顶级目录:

  //get Top level string[] TopLevel = Directory.GetDirectories(path); 

然后,您将不得不使用通配符模式对此文件夹执行resursivefunction,例如:

  // Only get subdirectories that begin with the letter "p." string pattern = "p*"; string[] dirs = folder.GetDirectories(path, pattern); 

我建议您使用通配符来获取数组输出,如果使用resursive函数或直接查询路径,您将找出最佳方法。

编辑 :啊,.NET 4的新function,所以你不必做一个递归function(感谢Matthew Brubaker)

 IEnumerable matchingFilePaths2 = System.IO.Directory.EnumerateFiles(@"C:\some folder to start in", filePatternToMatchOn, System.IO.SearchOption.AllDirectories); 

第一个答案:

 //get all files that have an underscore - searches all folders under the start folder List matchingFilePaths = new List(); String filePatternToMatchOn = "*_*"; FileUtilities.GetAllFilesMatchingPattern(@"C:\some folder to start in", ref matchingFilePaths, filePatternToMatchOn); 

 public static void GetAllFilesMatchingPattern(String pathToGetFilesIn, ref List fullFilePaths, String searchPattern) { //get all files in current directory that match the pattern String[] filePathsInCurrentDir = Directory.GetFiles(pathToGetFilesIn, searchPattern); foreach (String fullPath in filePathsInCurrentDir) { fullFilePaths.Add(fullPath); } //call this method recursively for all directories String[] directories = Directory.GetDirectories(pathToGetFilesIn); foreach (String path in directories) { GetAllFilesMatchingPattern(path, ref fullFilePaths, searchPattern); } } 
  public static IEnumerable GetImages() { //For each "*Image" directory foreach (var jobFolder in Directory.EnumerateDirectories(@"\\server\Scanner\images", "*Images")) { //For each first level subdirectory foreach (var jobSubFolder in Directory.EnumerateDirectories(jobFolder)) { //Enumerate each file containing a '_' foreach (var filePath in Directory.EnumerateFiles(jobSubFolder, "*_*", SearchOption.TopDirectoryOnly)) { yield return filePath; } } } } 

仅枚举每个“* Image”目录的第一级子目录中的文件。

最后你可以用它:

 foreach (var path in GetImages()) { Console.WriteLine(path); }