2009-11-05 15 views
28

Ho una posizione di directory, come posso creare tutte le directory? per esempio. C: \ Match \ Upload creerà sia la corrispondenza che il caricamento della sottodirectory se non esiste.Crea directory + sottodirectory

con C# 3.0

Grazie

risposta

56

Directory.CreateDirectory (@ "C: \ Partita \ Upload") sarà ordinare tutto questo per voi. Non è necessario creare tutte le sottodirectory! Il metodo di creazione directory crea tutte le directory e sottodirectory per te.

+0

Riferimento https://msdn.microsoft.com/en-us/library/system.io.directory.createdirectory.aspx –

8
if (!System.IO.Directory.Exists(@"C:\Match\Upload")) 
{ 
    System.IO.Directory.CreateDirectory(@"C:\Match\Upload"); 
} 
+1

La directory può non esiste al se ma esiste ancora durante il tentativo di creazione con quel metodo. Non preoccuparti dell'esistenza e usa invece una presa. –

+7

Effettivamente la chiamata a CreateDirectory non avrà esito negativo anche se la directory esiste, quindi utilizzarla è ridondante. – RichardOD

1

per Googler: in puro Win32/C++, utilizzare SHCreateDirectoryEx

inline void EnsureDirExists(const std::wstring& fullDirPath) 
{ 
    HWND hwnd = NULL; 
    const SECURITY_ATTRIBUTES *psa = NULL; 
    int retval = SHCreateDirectoryEx(hwnd, fullDirPath.c_str(), psa); 
    if (retval == ERROR_SUCCESS || retval == ERROR_FILE_EXISTS || retval == ERROR_ALREADY_EXISTS) 
     return; //success 

    throw boost::str(boost::wformat(L"Error accessing directory path: %1%; win32 error code: %2%") 
     % fullDirPath 
     % boost::lexical_cast<std::wstring>(retval)); 

    //TODO *djg* must do error handling here, this can fail for permissions and that sort of thing 
} 
+0

Solo Windows XP e 2003, dice la documentazione – MikMik

+0

Il ragazzo ha chiesto di C#, ma questo è esattamente quello che sto cercando :-) –

+1

Da quando è boost puro win32 – Kobor42

0

Ecco un esempio con un oggetto DirectoryInfo che creerà la directory e tutte le sottodirectory:

var path = @"C:\Foo\Bar"; 
new System.IO.DirectoryInfo(path).Create(); 

Calling Create() non errore se il percorso esiste già.

Se si tratta di un percorso di file si può fare:

var path = @"C:\Foo\Bar\jazzhands.txt"; 
new System.IO.FileInfo(path).Directory.Create(); 
Problemi correlati