2010-09-14 94 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

您已經檢查了FileInfo和DirectoryInfo提供的API嗎?實現你想要的行爲對於這些類來說相當簡單... – 2010-09-14 15:59:30

回答

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 2015-11-11 07:21:11

+1

@galmok:使用'Directory.GetFileSystemEntries(...)'而不是'Directory.GetFiles(...)'和'「*」'而不是'「*。*」'。 – RiA 2017-08-26 13:34:48

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

真的很容易,它很有趣。但爲了只獲取名稱 - foreach(子目錄中的字符串str) Console.WriteLine(str.Split('\\')。Last()); foreach(String str in subFiles) Console.WriteLine(str.Split('\\')。Last()); – sapatelbaps 2013-11-26 17:51:39

0

我記得不久以前解決類似的問題,SO,儘管它是在VB。這是question

相關問題