【发布时间】:2012-11-30 00:01:24
【问题描述】:
我正在使用 C# 4.5,并且正在尝试扫描文件共享中的所有文件夹。我想跳过我无法访问的任何文件夹并继续。我所做的是递归地执行它,这会引发 stackoverflow。我明白为什么会这样。所以我的问题是:有什么解决方法吗?
由于我们不能使用递归搜索,您将如何实现这一点?我可以使用任何第三方库来简化此操作吗? GetFolder 函数只是提取一些信息并返回一个自定义类,这很好用。
public void GetFoldersFromFS(string filePath)
{
if (filePath == null)
{
return;
}
Directory.SetCurrentDirectory(filePath);
try
{
foreach (var directory in Directory.EnumerateDirectories(Directory.GetCurrentDirectory()))
{
Resources.Add(GetFolder(new DirectoryInfo(directory)));
GetFoldersFromFS(directory);
}
}
catch (UnauthorizedAccessException e)
{
Log.Warn(e.Message);
}
catch (PathTooLongException e)
{
Log.Warn(e.Message);
}
}
【问题讨论】:
-
Directory.EnumerateDirectories(path, "*.*",SearchOption.AllDirectories);?? -
如果你想通过递归调用实现堆栈溢出,你需要大约 10.000 次迭代。你确定你的目录结构这么深(我觉得windows不支持这么长的路径名)?
-
是的,就是这么深,这就是为什么我在下山的过程中还要更改目录以避免 PathTooLongException。
-
@L.B:问题是我是否有异常。它只是取消了操作,我一无所有。
标签: c# recursion directory stack-overflow .net-4.5