递归列出给定路径下的所有文件和文件夹?

13

可能是重复的问题:
如何在C#中递归列出目录中的所有文件?

我想要列出给定文件夹(路径)的文件和文件夹的“子路径”。

假设我有文件夹 C:\files\folder1\subfolder1\file.txt

如果我给出函数 c:\files\folder1\,

我将得到 subfolder1 subfolder1\file.txt


4
你是否已经查看了FileInfo和DirectoryInfo提供的API?使用这些类实现你想要的行为非常容易。 - Kirk Woll
5个回答

28

您可以使用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
2
@galmok:使用Directory.GetFileSystemEntries(...)代替Directory.GetFiles(...),并使用"*"代替"*.*" - Glitch

26

试试这样做:

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);
    }
}

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

非常简单而且很实用。但是要仅获取名称 - foreach (String str in subDirectories) Console.WriteLine(str.Split('\').Last()); foreach (String str in subFiles) Console.WriteLine(str.Split('\\').Last()); - sapatelbaps

0

0

我记得不久之前在SO上解决了一个类似的问题,虽然它是用VB解决的。这是问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接