2016-12-14 1 views
3

Je veux créer une arborescence de répertoires simple comme celui-ci, bien qu'il n'a pas besoin d'avoir le même nomPuis-je créer 2 sous-répertoires en même temps C#?

Directory Tree

Ai-je besoin de l'écrire comme ceci:

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

Y at-il une option pour créer "Pepe" et "Juan" dans le même chemin de la chaîne?

+6

Non. Mais quel est le problème avec la façon dont vous l'avez? –

+0

vous devez utiliser la méthode CreateDirectory chaque fois que vous devez créer un répertoire. Ce n'est pas fini, quel est le problème? – LONG

+0

Si cela ne vous convient pas, créez une méthode statique qui accepte un tableau de répertoires sous forme de chaîne et l'utilise comme méthode pratique. c'est à dire. 'public static void CreateDirs (params chaîne [] dirPaths) {/ * boucle sur tableau et créer des répertoires * /}' – Igor

Répondre

2

Non, il n'y a rien de cuit dans le BCL pour le faire; vous devez appeler CreateDirectory pour chacun.

Si vous avez une collection de chemins d'accès, vous pouvez mettre qu'à l'intérieur d'une boucle:

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

pour poster une réponse et offrir une alternative, si vous ne voulait avoir une utilisation de la méthode CreateDirectory puis vous pourriez avoir une méthode qui prend un paramètre de params string[] et passer dans les répertoires lors de l'appel de la méthode.

Le code ressemblerait si

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

Vous pouvez l'appeler avec

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

Ou vous pouvez passer dans un tableau de chaînes

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

je réduis l'utilisation du System.IO méthodes faisant ci-dessus, alors je suis l'interface de la classe qui me permet de créer des mocks, puis vous Test nit le logiciel que je crée sans effectuer d'opération d'E/S, ce qui apporte un scénario où vous pourriez utiliser ce qui précède, sauf qu'il ne serait pas statique.

1

Il semble que vous avez un répertoire racine commune:

/home/XXX/Documents/Users 

et que vous voulez ajouter des sous-répertoires à partir de là. Si tel est le cas et si l'objectif est d'avoir uniquement pour référencer les sous-répertoires, alors j'aller avec @ l'approche de ColinM, mais modifier légèrement comme suit:

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

Maintenant, quand vous l'appelez, vous seulement besoin de mentionner la racine une fois

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

la bonne chose à propos Path.Combine est que vous n'avez pas à vous soucier d'avoir une barre oblique / qui est soit dans la traîne directoryRoot ou de premier plan dans l'un des directories --il s'assurera qu'il est correctement formaté à la fin.

Bien sûr, si vous adoptez cette approche, vous devrez décider ce qui se passe si directories est null - créez-vous le directoryRoot (en supposant qu'il ne soit pas déjà là), jetez-vous une erreur, ou faites-vous vous venez de revenir?

0

Vous pouvez créer comme.

System.IO.Directory.CreateDirectory ("c:/Dir1/Dir2/Dir3");

Pensez qu'il n'y a pas Dir1 à la racine de c: lecteur.

Il créera la structure de dossier comme Dir1 -> Dir2 -> Dir3.

Si Die1 est là alors il créera le reste du sous-répertoire.

Identique pour plusieurs niveaux.