C # Перечислять файлы 2 папки вниз с помощью Directory.GetDirectories () - PullRequest
0 голосов
/ 27 июня 2018

Используя 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 голосов
/ 28 июня 2018

Вы можете сделать что-то подобное, вам просто нужно добавить код, если у вас нет прав доступа к каталогу.

                    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
                        }
                    });
0 голосов
/ 28 июня 2018

Вы используете счетчик для уровня и вызываете метод рекурсивно.

непроверенный код:

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

или вы можете изменить это, чтобы развернуть, затем вернуться к следующему и т. Д., Но все еще используя счетчик.

Если вам нужны файлы (хотя в основной части вашего вопроса об этом не упоминалось, только заголовок), просто итерируйте результат, получая файлы в каждой из ваших папок.

...