Могу ли я создать 2 подкаталога одновременно C#?

Я хочу создать простое дерево каталогов, подобное этому, хотя оно не должно иметь того же имени

Дерево каталогов

Мне нужно написать это так:

Directory.CreateDirectory("/home/XXX/Documents/Users/Pepe/datos/");
Directory.CreateDirectory("/home/XXX/Documents/Users/Juan");

Есть ли возможность создать "Пепе" и "Хуан" по одному и тому же пути?

4 ответа

Чтобы опубликовать ответ и предложить альтернативу, если вы хотите только одно использование CreateDirectory метод, то вы могли бы иметь метод, который принимает параметр params string[] и передайте туда каталоги при вызове метода.

Код будет выглядеть так

private static void CreateDirectories(params string[] directories)
{
    foreach (string directory in directories)
    {
        Directory.CreateDirectory(directory);
    }
}

Вы можете позвонить с

CreateDirectories("/home/XXX/Documents/Users/Pepe/datos/", "/home/XXX/Documents/Users/Juan");

Или вы можете передать в массив строк

CreateDirectories(new [] { "/home/XXX/Documents/Users/Pepe/datos/", "/home/XXX/Documents/Users/Juan"});

Я уменьшаю использование System.IO методы, выполняющие вышеописанное, затем я связываю интерфейс с классом, который позволяет мне создавать макеты, а затем модульно тестировать созданное мной программное обеспечение, не выполняя операции ввода-вывода, что приводит к одному сценарию, в котором вы можете использовать вышеизложенное, за исключением того, что оно не будет статичным.

Нет, в BCL ничего не выпекается; ты должен позвонить CreateDirectory для всех.

Если у вас есть коллекция путей к каталогам, вы можете поместить это в цикл:

foreach (string dirPath in directoryPaths)
{
    Directory.CreateDirectory(dirPath);
}

Похоже, у вас есть общий корневой каталог:

/home/XXX/Documents/Users

и вы хотите добавить подкаталоги оттуда. Если это так, и если цель состоит в том, чтобы ссылаться только на подкаталоги, то я бы использовал подход @ColinM, но немного изменил бы его следующим образом:

private static void CreateDirectories(string directoryRoot, params string[] directories)
{
    foreach (string directory in directories)
    {
        Directory.CreateDirectory(Path.Combine(directoryRoot, directory));
    }
}

Теперь, когда вы звоните, вам нужно только упомянуть корень один раз

CreateDirectories("/home/XXX/Documents/Users", "Pepe/datos/", "Juan");

Хорошая вещь о Path.Combine в том, что вам не нужно беспокоиться о слэше / это либо тянется в directoryRoot или ведущий в любом из directories- в конце он убедится, что он правильно отформатирован.

Конечно, если вы выберете такой подход, вам нужно решить, что произойдет, если directories является нулевым - вы создаете directoryRoot (при условии, что он еще не существует), вы бросаете ошибку, или вы просто возвращаете?

Вы можете создать как.

System.IO.Directory.CreateDirectory ("C:/Dir1/Dir2/DIR3");

Думаю, что нет корня Dir1 в корне диска c:.

Это создаст структуру папок как Dir1 ->Dir2->Dir3.

Если Die1 там, то он создаст остаток подкаталога.

То же самое для нескольких уровней.

Другие вопросы по тегам