2010-04-23 47 views

Respuesta

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

donde sMatch es el criterio de lo que debe buscar.

+2

¡La respuesta de SLaks (abajo) es realmente mucho mejor + más conciso! – cacau

+0

También estoy de acuerdo http://stackoverflow.com/a/2700080/14753 es más limpio – Glennular

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

puede pasar en un segundo parámetro de opciones. Además, puede usar linq para filtrar los resultados aún más.

cheque here for MSDN documentation

5

Si los requisitos de contrapartida son simples, intente:

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

si requieren algo más complicado , puede usar expresiones regulares (y 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

Gracias por la utilidad poco más allí! – Ron16

1

De la memoria de modo puede ser necesario ajustar

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