2010-09-14 10 views
10

Powiel możliwe:
How to recursively list all the files in a directory in C#?listę rekurencyjnie wszystkie pliki i foldery pod podaną ścieżką?

chcę listy z "sub-path" plików i folderów dla dając folderu (path)

powiedzmy mam folder C: \ files \ folder1 \ podfolder1 \ plik.txt

jeśli podaję funkcję c: \ files \ folder1 \

dostanę Subfolder1 Subfolder1 \ plik.txt

+4

Sprawdziłeś interfejs API dostępny w FileInfo i DirectoryInfo? Implementacja zachowania, które chcesz, jest dość banalna w przypadku tych klas ... –

Odpowiedz

23

spróbować czegoś takiego:

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

można użyć metody Directory.GetFiles do listy wszystkich plików w folderze:

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

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

Note parametr SearchOption może być używany do kontrolowania, czy wyszukiwanie ma charakter rekurencyjny (SearchOption.AllDirectories), czy nie (SearchOption.TopDirectoryOnly).

+1

To rozwiązanie nie uwzględnia folderów na zwróconej liście. – galmok

+1

@galmok: Użyj 'Directory.GetFileSystemEntries (...)' zamiast 'Directory.GetFiles (...)' i '" * "' zamiast '" *. * "'. – RiA

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

Naprawdę łatwe i kołysze. Ale aby uzyskać tylko nazwy - foreach (String str w podkatalogach) Console.WriteLine (str.Split ('\\'). Last()); foreach (String str w podfiles) Console.WriteLine (str.Split ('\\'). Last()); – sapatelbaps

0

Pamiętam rozwiązania podobnego problemu nie tak dawno temu na SO, choć było to w VB. Oto question.

Powiązane problemy