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

我正在尝试遍历整个目录树并打印出列表框控件上的所有文件名。 我写了一些代码,但有错误。 不知道我做错了什么。 顺便说一句,这是在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); } } } } 

Microsoft支持站点上有一个完整的示例

这里的问题是你想从事件处理程序调用 DirSearch ,但看起来你正试图在事件处理程序中定义方法DirSearch 。 这是无效的。

您需要更改代码,如下所示:

 private void Button_Click_1(object sender, RoutedEventArgs e) { string sourcePath = @"C:\temp\"; this.DirSearch(sourcePath); } private void DirSearch(string sDir) { try { foreach (string f in Directory.GetFiles(sDir, txtFile.Text)) { lstFilesFound.Items.Add(f); } foreach (string d in Directory.GetDirectories(sDir)) { this.DirSearch(d); } } catch (System.Exception excpt) { listBox1.Items.Add(ex.Message); } } 

使用GetDirectories()重载接受SearchOption :

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

或者更好的EnumerateFiles() :

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

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