2010-10-27 23 views
10

Tengo una colección de archivos con rutas totalmente calificadas (root/test/thing1/thing2/file.txt). Deseo foreach sobre esta colección y colocar el archivo en la ubicación definida en la ruta, sin embargo, si no existen ciertos directorios, quiero que se creen de manera excelente automáticamente. Mi programa tiene una "ubicación de colocación" predeterminada, como z:/. La "ubicación de colocación" comienza vacía, por lo que en mi ejemplo anterior, el primer elemento debería crear automáticamente los directorios necesarios para crear z:/root/test/thing1/thing2/file.txt. ¿Cómo puedo hacer esto?Crear directorios automáticamente desde rutas largas

Respuesta

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]); 
} 

donde los archivos son IDictionary<string, object>.

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

Comprobar IO namespace (Directory, Path), creo que van a ayudarle a

using System.IO 

y comprobar su valor ..

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/...") 

Crea todos los directorios y subdirectorios la ruta especificada

+0

estuvo de acuerdo, no hay necesidad de comprobar si existe directorio que lo hace internamente. – 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); 

con manejo de excepciones adecuado, por supuesto.

0

He encontrado que establecer la "ubicación predeterminada" al inicio de la ejecución es útil y reducir un poco el código redundante (por ejemplo, Path.Combine(defaultLocation, relativePath)).

Ejemplo:

var defaultLocation = "z:/"; 
Directory.SetCurrentDirectory(defaultLocation); 
Directory.SetCurrentDirectory(AppContext.BaseDirectory); 
Cuestiones relacionadas