2010-09-14 21 views
10

Duplicar posible:
How to recursively list all the files in a directory in C#?¿enumera recursivamente todos los archivos y carpetas bajo la ruta dada?

Quiero que la "ruta secundaria" de los archivos y carpetas de la carpeta dando (ruta)

digamos que tengo el carpeta C: \ archivos \ carpeta1 \ subcarpeta1 \ archivo.txt

si doy la función c: \ archivos \ carpeta1 \

voy a tener subcarpeta1 subcarpeta1 \ archivo.txt

+4

¿Has examinado la API disponible con FileInfo y DirectoryInfo? Implementar el comportamiento que desea es bastante trivial con esas clases ... –

Respuesta

23

intentar algo como esto:

static void Main(string[] args) 
{ 
    DirSearch(@"c:\temp"); 
    Console.ReadKey(); 
} 

static void DirSearch(string dir) 
{ 
    try 
    { 
     foreach (string f in Directory.GetFiles(dir)) 
      Console.WriteLine(f); 
     foreach (string d in Directory.GetDirectories(dir)) 
     { 
      Console.WriteLine(d); 
      DirSearch(d); 
     } 

    } 
    catch (System.Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 
24

Usted puede utilizar el método Directory.GetFiles para listar todos los archivos en una carpeta:

string[] files = Directory.GetFiles(@"c:\files\folder1\", 
    "*.*", 
    SearchOption.AllDirectories); 

foreach (var file in files) 
{ 
    Console.WriteLine(file); 
} 

Nota que el parámetro SearchOption se puede usar para controlar si la búsqueda es recursiva (SearchOption.AllDirectories) o no (SearchOption.TopDirectoryOnly).

+1

Esta solución no incluye carpetas en la lista devuelta. – galmok

+1

@galmok: use 'Directory.GetFileSystemEntries (...)' en lugar de 'Directory.GetFiles (...)' y '" * "' en lugar de '" *. * "'. – RiA

5
String[] subDirectories; 
String[] subFiles; 
subDirectories = System.IO.Directory.GetDirectories("your path here"); 
subFiles = System.IO.Directory.GetFiles("your path here"); 
+0

Realmente fácil y rocoso. Pero para obtener solo nombres: foreach (String str en los subdirectorios) Console.WriteLine (str.Split ('\\'). Last()); foreach (String str en subFiles) Console.WriteLine (str.Split ('\\'). Last()); – sapatelbaps

0

me acuerdo de la solución de un problema similar no hace mucho tiempo en el SO, aunque fue en VB. Aquí está el question.

Cuestiones relacionadas