我正在尝试使用以下代码递归显示 tmp 文件的数量。但是当我出于递归目的调用 DirSearch() 时;我得到一个错误,没有重载方法可以接受 1 个参数。
namespace TestForm
{
public partial class TEST : Form
{
public TEST()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TEST search = new TEST();
search.DirSearch();
int result = search.DirSearch();
label1.Text = result.ToString();
}
public int DirSearch()
{
int count = 0;
var sDir = Directory.GetFiles(@"C:\", "*.tmp", SearchOption.AllDirectories);
try
{
foreach (string d in sDir)
{
foreach (string f in Directory.GetFiles(d, "*.tmp"))
{
string extension = Path.GetExtension(f);
if (extension != null && (extension.Equals(".tmp")))
{
count++;
return count;
}
}
DirSearch(d);
}
}
catch (UnauthorizedAccessException)
{
}
}
}
}
请您参考如下方法:
我认为您对您要实现的递归算法有点误解。
要使递归方法起作用,它需要对输入进行操作,然后对派生的输入再次(递归地)调用自身。
您的 DirSearch() 方法不接受任何输入,因此它会一遍又一遍地计算相同的东西。您需要将根路径传递给递归算法将开始的方法,因此签名应更改为:
public int DirSearch(string rootPath)
然后改变:
var sDir = Directory.GetFiles(rootPath, "*.tmp", SearchOption.AllDirectories);
现在,在 DirSearch 方法的主体中,您必须枚举提供的路径中的所有目录,然后使用这些目录的完整路径调用 DirSeach 方法:
DirSearch(d)