Jef*_*uan 6 c# directory recursion list subdirectory
我有一个功能,目前抓住所有文件夹和子文件夹,检查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);
}
}
Run Code Online (Sandbox Code Playgroud)
显然这并不像以前那么好,因为我已经解决了一段时间的问题,但如果有人能指出我正确的方向来解决这个问题,我会非常高兴!
Ond*_*cny 18
首先,避免将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);
}
}
Run Code Online (Sandbox Code Playgroud)
一种可能的方法是在方法外添加一个类字段,并在变量中添加一个最大深度级别.
int水平;
private void StepThroughDirectories(string dir, int depth)
{
levels ++;
if (levels > depth)
return;
string[] directories = Directory.GetDirectories(dir);
try
{ ...
Run Code Online (Sandbox Code Playgroud)