递归遍历目录树并列出文件名
我正在尝试遍历整个目录树并打印出列表框控件上的所有文件名。 我写了一些代码,但有错误。 不知道我做错了什么。 顺便说一句,这是在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) { ... }
请注意,它执行惰性文件系统扫描。