2009-11-05 24 views
28

Tengo una ubicación de directorio, ¿cómo puedo crear todos los directorios? p.ej. C: \ Match \ Upload creará Match y el subdirectorio Upload si no existe.Crear Directorio + Sub-Directorios

con C# 3.0

Gracias

Respuesta

56

Directory.CreateDirectory (@ "C: \ partido \ Subir") va a ordenar todo esto para usted. ¡No necesita crear todos los subdirectorios! El método de crear directorios crea todos los directorios y subdirectorios para usted.

+0

Referencia 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

El directorio puede no existe en el if, pero aún existe durante el intento de creación con ese método. No se moleste con la existencia y use una captura en su lugar. –

+7

En realidad, llamar a CreateDirectory no fallará incluso si el directorio existe, por lo que usarlo es redundante. – RichardOD

1

para los empleados de Google: en Win32 puro/C++, utilice 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

Windows XP y 2003 solamente, dice la documentación – MikMik

+0

El tipo preguntó acerca de C#, pero esto es exactamente lo que estoy buscando :-) –

+1

Desde cuándo es impulso puro win32 – Kobor42

0

Aquí se muestra un ejemplo con un objeto DirectoryInfo que creará el directorio y todos los subdirectorios:

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

Calling Create() no tendrá errores si la ruta de acceso ya existe.

Si se trata de una ruta de archivo que puede hacer:

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