0

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

2 回答 2

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);

或者您可以将其更改为向下钻取,然后返回下一个等,但仍使用计数器。

如果您需要这些文件(尽管您的问题正文没有提及,只有标题),只需遍历结果,获取您获得的每个文件夹中的文件。

于 2018-06-27T21:00:14.857 回答
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
                        }
                    });
于 2018-06-27T21:12:51.457 回答