2010-09-14 3 views
10

Можно создать дубликат:
How to recursively list all the files in a directory in C#?список рекурсивно всех файлов и папок по заданному пути?

Я хочу перечислить «подпути» файлов и папок для давая папку (путь)

скажем, у меня есть папка C: \ files \ folder1 \ subfolder1 \ file.txt

если я предоставляю функцию c: \ files \ folder1 \

я получить subfolder1 subfolder1 \ file.txt

+4

Вы изучили API, доступный с помощью FileInfo и DirectoryInfo? Реализация поведения, которое вы хотите, довольно тривиально с этими классами ... –

ответ

23

попробовать что-то вроде этого:

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

Вы можете использовать метод Directory.GetFiles чтобы получить список всех файлов в папке:

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

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

Примечание что параметр SearchOption может использоваться для контроля того, является ли поиск рекурсивным (SearchOption.AllDirectories) или нет (SearchOption.TopDirectoryOnly).

+1

Это решение не включает папки в возвращаемом списке. – galmok

+1

@galmok: Используйте 'Directory.GetFileSystemEntries (...)' вместо 'Directory.GetFiles (...)' и '" * "' вместо '' *. * "'. – RiA

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

Действительно легко и это скалы. Но для получения только имен - foreach (String str в подкаталогах) Console.WriteLine (str.Split ('\\'). Last()); foreach (String str в подфайлах) Console.WriteLine (str.Split ('\\'). Last()); – sapatelbaps

0

Я помню, решая подобную проблему не так давно на SO, хотя это было в VB. Вот question.

Смежные вопросы