Ste*_*Way 9 c# directory recursion
我正在尝试遍历整个目录树并打印出列表框控件上的所有文件名.我写了一些代码,但有错误.不知道我做错了什么.顺便说一句,这是在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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
p.s*_*w.g 22
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);
}
}
Run Code Online (Sandbox Code Playgroud)
aba*_*hev 13
使用GetDirectories()重载接受SearchOption:
string[] dirs = Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
foreach(dir)
{
...
}
Run Code Online (Sandbox Code Playgroud)
或更好的EnumerateFiles():
IEnumerable<string> files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories))
foreach(files)
{
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,它执行惰性文件系统扫描.