gpt4 book ai didi

c# - 如何限制递归子目录搜索的深度

转载 作者:太空狗 更新时间:2023-10-29 20:45:48 25 4
gpt4 key购买 nike

我有一个功能,目前可以抓取所有文件夹和子文件夹来检查我正在构建的一个小工具的 ACL,但我正在努力想弄清楚如何限制它可以达到的深度去。例如,您有一个 4 层深的文件夹,但我希望只能为 ACL 抓取其中的 3 层。

目前我已经这样编码了:

private void StepThroughDirectories(string dir)
{
string[] directories = Directory.GetDirectories(dir);
try
{
foreach (string d in Directory.GetDirectories(dir))
{
if (recCount < (int)Depth)
{
GetACLs(d, new DirectoryInfo(d));
pBar.Value += 1;
//MessageBox.Show("Recursive Level: " + counter.ToString());
recCount++;
StepThroughDirectories(d);
}
else
{
recCount--;
}
}
}
catch (System.Exception e)
{
Console.WriteLine(e.Message);
}
}

显然,这并不像以前那么好,因为我已经研究这个问题一段时间了,但如果有人能指出正确的方向来解决这个问题,我会很高兴!

最佳答案

首先,避免在外部将 recCount 字段声明为“全局”变量。在递归场景中,通过递归调用传递状态通常更易于管理。

其次,将深度测试移出 foreach 以消除不必要的文件系统子目录查询。

第三,将实际的处理逻辑放在方法的开头,同样在子目录处理循环之外。

您的代码将如下所示:

void StepThroughDirectories(string dir)
{
StepThroughDirectories(dir, 0)
}

void StepThroughDirectories(string dir, int currentDepth)
{
// process 'dir'
...

// process subdirectories
if (currentDepth < MaximumDepth)
{
foreach (string subdir in Directory.GetDirectories(dir))
StepThroughDirectories(subdir, currentDepth + 1);
}
}

关于c# - 如何限制递归子目录搜索的深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com