2010-09-12 14 views
48

Solo una domanda veloce. Sto usando qualcosa di simileFileStream e creazione di cartelle

FileStream fs = new FileStream(fileName, FileMode.Create); 

mi chiedevo se ci fosse un parametro che potrei passare ad esso per costringerlo a creare la cartella, se non esiste. Al momento viene lanciata un'eccezione se la cartella non viene trovata.

Se esiste un metodo migliore, utilizzare FileStream Sono aperto alle idee.

risposta

97

Uso Directory.CreateDirectory:

Directory.CreateDirectory Method (String)

Crea tutte le directory e sottodirectory come specificato dal percorso.

Esempio:

string fileName = @"C:\Users\SomeUser\My Documents\Foo\Bar\Baz\text1.txt"; 

Directory.CreateDirectory(Path.GetDirectoryName(fileName)); 

using (FileStream fs = new FileStream(fileName, FileMode.Create)) 
{ 
    // ... 
} 

(Path.GetDirectoryName restituisce la parte della directory del nome del file.)

+1

dire che ho/cartella1/cartella2/Cartella3/folder4/file.txt poiché il nome file e la cartella1 non esistono. Verrà creato sopra tutte e 4 le cartelle. –

+0

@Ash Burlaczenko: l'ho appena testato e, sì, lo fa. – dtb

+0

Cosa succederebbe se la cartella esistesse già e tu abbia eseguito quella linea –

14

qualcosa di simile:

void EnsureFolder(string path) 
{ 
    string directoryName = Path.GetDirectoryName(path); 
    if ((directoryName.Length > 0) && (!Directory.Exists(directoryName))) 
    { 
     Directory.CreateDirectory(directoryName); 
    } 
} 
+1

Perché questo è così meno upvoted, è un buon modo per controllare e creare una cartella. –

+0

@ChaitanyaGadkari probabilmente perché Directory.CreateDirectory non genera un'eccezione se la directory esiste già; quindi la risposta di dtb è succinta per la maggior parte delle persone che affrontano un problema simile. – nullable