递归遍历目录树并列出文件名

时间:2013-03-15 23:40:44

标签: c# recursion directory

我正在尝试遍历整个目录树并打印出列表框控件上的所有文件名。我写了一些代码,但有错误。不知道我做错了什么。顺便说一句,这是在Visual Studio中使用WPF的C#。

以下是Visual Studio中的整个项目解决方案:http://tinyurl.com/a2r5jv9

如果您不想下载项目解决方案,请输入以下MainWindow.xaml.cs代码:http://pastebin.com/cWRTeq3N

我也会在这里粘贴代码。

public partial class MainWindow : Window
{
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        string sourcePath = @"C:\temp\";            

        static void DirSearch(string sourcePath)
        {
            try
            {
                foreach (string d in Directory.GetDirectories(sourcePath))
                {
                    foreach (string f in Directory.GetFiles(d))
                    {
                        listBox1.Items.Add(f);
                    }
                    DirSearch(d);
                }
            }                      
            catch (Exception ex)
            {
                listBox1.Items.Add(ex.Message);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:21)

Microsoft支持网站上有complete example

这里的问题是你要从事件处理程序中调用 DirSearch,但是你似乎正在尝试定义方法{{1在事件处理程序内部。这是无效的。

您需要按如下方式更改代码:

DirSearch

答案 1 :(得分:12)

使用GetDirectories() overload accepting SearchOption

string[] dirs = Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
foreach(dir)
{
    ...
}

或更好EnumerateFiles()

IEnumerable<string> files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories))
foreach(files)
{
    ...
}

请注意,它执行 lazy 文件系统扫描。