2010-10-27 2 views
10

Ho una raccolta di file con percorsi completi (root/test/thing1/thing2/file.txt). Voglio foreach su questa raccolta e rilasciare il file nella posizione definita nel percorso, tuttavia, se alcune directory non esistono, voglio che vengano create automaticamente. Il mio programma ha un "drop location" predefinito, come ad esempio z:/. Il "drop location" inizia vuoto, quindi nel mio esempio sopra, il primo elemento dovrebbe creare automaticamente le directory necessarie per creare z:/root/test/thing1/thing2/file.txt. Come posso fare questo?Crea automaticamente directory da percorsi lunghi

risposta

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

dove file è IDictionary<string, object>.

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

Controllare IO namespace (Directory, Path), penso che vi aiuteranno

using System.IO 

controllarlo ..

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 tutte le directory e sottodirectory in il percorso specificato

+0

Concordato, non c'è bisogno di controllare se directory esiste come fa questo 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 adeguata gestione delle eccezioni, ovviamente.

0

Ho trovato l'impostazione del "percorso predefinito" all'inizio dell'esecuzione per essere utile e ridurre un po 'di codice ridondante (ad esempio, Path.Combine(defaultLocation, relativePath)).

Esempio:

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