C#使用Directory.GetDirectories()向下枚举文件2个文件夹

时间:2018-06-27 20:37:43

标签: c# directorysearcher

使用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>();
        }
    }

2 个答案:

答案 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
                        }
                    });