2010-10-27 4 views
10

J'ai une collection de fichiers avec des chemins complets (root/test/thing1/thing2/file.txt). Je veux foreach sur cette collection et dépose le fichier à l'emplacement défini dans le chemin, cependant, si certains répertoires n'existent pas, je veux qu'ils soient créés automatiquement. Mon programme a un "emplacement de dépôt" par défaut, tel que z:/. L'emplacement de dépôt commence vide, donc dans mon exemple ci-dessus, le premier élément devrait créer automatiquement les répertoires nécessaires pour créer z:/root/test/thing1/thing2/file.txt. Comment puis-je faire ceci?Créer automatiquement des répertoires à partir de chemins longs

Répondre

16
foreach (var relativePath in files.Keys) 
{ 
    var fullPath = Path.Combine(defaultLocation, relativePath); 
    var directory = Path.GetDirectoryName(fullPath); 

    Directory.CreateDirectory(directory); 

    saveFile(fullPath, files[relativePath]); 
} 

où les fichiers sont IDictionary<string, object>.

10
string somepath = @"z:/root/test/thing1/thing2/file.txt"; 
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName((somepath)); 
3

Vérifiez IO namespace (Directory, Path), je pense qu'ils vont vous aider à

using System.IO 

Vérifiez ensuite il ..

string fileName [email protected]"d:/root/test/thing1/thing2/file.txt"; 
string directory = Path.GetDirectoryName(fileName); 
if (!Directory.Exists(directory)) 
    Directory.CreateDirectory(directory); 
7
Directory.CreateDirectory("/root/...") 

Crée tous les répertoires et sous-répertoires le chemin spécifié

+0

Convenu, pas besoin de vérifier si le répertoire existe comme il le fait en interne. – Squirrel

1
string filename = "c:\\temp\\wibble\\wobble\\file.txt"; 
string dir = Path.GetDirectoryName(filename); 
if (!Directory.Exists(dir)) 
{ 
    Directory.CreateDirectory(dir); 
} 
File.Create(filename); 

avec traitement des exceptions approprié, bien sûr.

0

J'ai trouvé que définir "l'emplacement par défaut" au début de l'exécution était utile et réduisait un peu de code redondant (par exemple, Path.Combine(defaultLocation, relativePath)).

Exemple:

var defaultLocation = "z:/"; 
Directory.SetCurrentDirectory(defaultLocation); 
Directory.SetCurrentDirectory(AppContext.BaseDirectory); 
Questions connexes