2010-04-23 120 views

回答

3
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是一个什么样的搜索标准。

+2

SLaks答案(下)实际上是更好的方式+更简洁! – cacau 2014-05-22 07:58:24

+0

我也同意http://stackoverflow.com/a/2700080/14753更清洁 – Glennular 2015-10-09 22:00:02

5
DirectoryInfo di = new DirectoryInfo("c:/inetpub/wwwroot/demos"); 
FileInfo[] rgFiles = di.GetFiles("*.aspx"); 

,你可以在选项的第二个参数传递。另外,你可以使用linq来进一步过滤结果。

检查here for MSDN documentation

5

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

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

感谢有用的一点额外的存在! – Ron16 2017-03-04 19:53:31

1

从内存中,因此可能需要调整

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