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
10
A
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é
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);
Convenu, pas besoin de vérifier si le répertoire existe comme il le fait en interne. – Squirrel