Могу ли я создать 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 там, то он создаст остаток подкаталога.
То же самое для нескольких уровней.