【发布时间】:2018-06-27 20:37:43
【问题描述】:
使用 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>();
}
}
【问题讨论】:
-
为什么在这里打电话给
.ToList()?为什么不直接返回IEnumerable<string>? -
@JoelCoehoorn 我想我可以做到,我必须弄清楚 .ToList() 能给我带来什么好处
-
好处是减少了内存使用,并可能加快执行速度。
-
看看这篇文章 - 这是正确的做法:stackoverflow.com/questions/3874516/…
-
当您在 C:\ 上使用 SearchOption.AllDirectories 时,您可以保证捕获该异常而一无所获。它有一个名为 System Volume Information 的隐藏目录,用于保存还原点数据。默认情况下,即使是管理员也无权访问它。您必须自己递归,远离设置了 FileAttributes.System 的目录。如果您只对 2 个级别的深度感兴趣,也总是想要您想要的。这很重要,因为 3 TB 的驱动器可能需要几分钟才能迭代。
标签: c# directorysearcher