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

相关问题