Helpers - компьютеры, интернет, программирование

как распечатать каждый подкаталог, но каждый подкаталог должен быть вложен перед его печатью

Я пытаюсь распечатать каждый подкаталог без использования SearchOption.AllDirectories, только с Directory.GetDirectories, для этого я использую рекурсию. моя основная проблема состоит в том, чтобы распечатать каждый подкаталог с двумя пробелами впереди, например:

1
  1,1
    1,1,1
2
  2,1
3
etc...

    class Program
{

    static void Main(string[] args)
    {

        string path = @"D:\Heaven Benchmark 4.0";
        WriteDirectories(path);

        Console.ReadKey();

    }
    static void WriteDirectories(string path)
    {
        string[] dirs = Directory.GetDirectories(path/*, "*", SearchOption.AllDirectories*/);
        for (int i = 0; i < dirs.Length; i++)
        {
            Console.Write(dirs[i] + "\n");
            if (Directory.GetDirectories(dirs[i]).Length > 0)
            {
                Console.Write("  "); WriteDirectories(dirs[i]);continue;
            }
        }
    }
}
13.06.2018

  • возможно, отслеживать отступ с другим параметром вашего метода и увеличивать его при выполнении рекурсивного вызова? 13.06.2018

Ответы:


1

Я не знаю С#, поэтому некоторые синтаксис может быть неправильным, но вы можете сделать что-то вроде этого

static void WriteDirectories(string path, int level)
{
    string[] dirs = Directory.GetDirectories(path/*, "*", SearchOption.AllDirectories*/);
    for (int i = 0; i < dirs.Length; i++)
    {
        int l = level;
        while (l > 0) {
            Console.Write("  ");
            l -= 1;
        }
        Console.Write(dirs[i] + "\n");
        if (Directory.GetDirectories(dirs[i]).Length > 0)
        {
            WriteDirectories(dirs[i], level + 1);continue;
        }
    }
}

В вашем первоначальном вызове просто передайте 0 для уровня. Или, если вы не хотите раскрывать это, создайте частную вспомогательную функцию, которая имеет это, и сделайте общедоступную функцию, которая принимает только путь, вызывающий это с 0 для уровня.

13.06.2018

2

Я бы написал так. Просто используйте параметр level и вызовите его как

WriteDirectories(path,0);

static void WriteDirectories(string path,int level)
{
    string[] dirs = Directory.GetDirectories(path);
    foreach(var dir in dirs)
    {
        Console.WriteLine("".PadLeft(level*2, ' ') +  dir);
        WriteDirectories(dir, level + 1);
    }
}
13.06.2018

3

Вот один из способов сделать это, о чем я говорил в своем комментарии. Обратите внимание, что мы используем Path.GetFileName, чтобы получить только имя каталога (без полного пути), поэтому вывод выглядит немного лучше с отступами:

static void WriteDirectories(string path, int indent = 0)
{
    Console.WriteLine(new string(' ', indent * 2) + Path.GetFileName(path));

    foreach (string subDir in Directory.GetDirectories(path))
    {
        WriteDirectories(subDir, indent + 1);
    }
}
13.06.2018

4

Было неясно, нужен ли вам полный путь для каждого каталога или только имя этого каталога, поэтому, учитывая макет, я предположил только имя. Вот...

    static void Main(string[] args)
    {
        WriteDirectories(@"D:\Heaven Benchmark 4.0");
        Console.ReadKey();
    }

    private static void WriteDirectories(string path, int depth = 0)
    {
        string leafName = Path.GetFileName(path);
        string indent = new string(' ', depth * 2);
        Console.WriteLine($"{indent}{leafName}");

        string[] directories = Directory.GetDirectories(path);
        foreach (var directory in directories)
        {
            WriteDirectories(directory, depth + 1);
        }
    }
13.06.2018
Новые материалы

Интуитивное понимание тензоров в машинном обучении
Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

Почему объяснимость так важна прямо сейчас?
По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

Анимированный математический анализ
Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

Создание простого слайдера изображений с помощью JavaScript
Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

Создание базы данных с помощью супергероя «Python»
В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

ИИ для чайников: руководство для начинающих по пониманию будущего технологий
Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..