2010-04-23 17 views

risposta

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

dove sMatch è i criteri di cosa cercare.

+2

La risposta SLaks (in basso) è in realtà molto meglio + più concisa! – cacau

+0

Sono d'accordo anche http://stackoverflow.com/a/2700080/14753 è più pulito – Glennular

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

è possibile passare in un secondo parametro per le opzioni. Inoltre, puoi usare linq per filtrare ulteriormente i risultati.

controllo here for MSDN documentation

5

Se i requisiti corrispondenti sono semplici, provare:

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

se hanno bisogno di qualcosa di più complicato , puoi usare le espressioni regolari (e 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

Grazie per l'utile piccolo extra lì! – Ron16

1

Dalla memoria così può essere necessario tweaking

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