使用EnumerateDirectories如何仅枚举2个文件夹结构。示例:如果我从C:\开始,如何获取C内的文件夹以及下一级?
Directory.GetDirectories()到目前为止提供的唯一内容是
的SearchOption。SearchOption.AllDirectories || SearchOption.TopDirectoryOnly
这是我到目前为止所拥有的:
private static List<string> GetDirectories(string path, string searchPattern = "*")
{
try
{
return Directory.GetDirectories(path, searchPattern, SearchOption.TopDirectoryOnly).ToList();
}
catch (UnauthorizedAccessException)
{
return new List<string>();
}
}
答案 0 :(得分:1)
您使用一个计数器作为级别,然后递归调用该方法。
未经测试的代码:
private static List<string> GetDirectories(string path, int level, string searchPattern = "*")
{
if (level == 0)
return Directory.GetDirectories(path, searchPattern, SearchOption.TopDirectoryOnly).ToList();
else
{
List<string> l = new List<string>();
foreach (string path2 in Directory.GetDirectories(path, searchPattern, SearchOption.TopDirectoryOnly))
l.AddRange(GetDirectories(path2, level - 1, searchPattern));
return l;
}
}
并这样拨打电话:
return GetDirectories(yourPath, 1, yourSearchPattern);
或者您可以将其更改为向下钻取,然后返回到下一个等,但仍使用计数器。
如果您需要文件(尽管问题的正文没有提及,仅标题),只需遍历结果,将文件保存在您获得的每个文件夹中即可。
答案 1 :(得分:0)
您可以执行以下操作,如果您无权访问该目录,则只需添加一些代码。
Directory.GetDirectories(path, searchPattern).ToList().ForEach(
d =>
{
try
{
searchItems.Add(d);
searchItems.AddRange(Directory.GetDirectories(d, searchPattern, SearchOption.TopDirectoryOnly));
}
catch (UnauthorizedAccessException)
{
//do something when you are not authorized
}
});