2009-11-05 8 views
28

Mam lokalizację katalogu, w jaki sposób mogę utworzyć wszystkie katalogi? na przykład C: \ Match \ Upload utworzy zarówno Match, jak i podkatalog Directory Upload, jeśli nie istnieje.Utwórz katalog + podkatalogi

Korzystanie z C# 3.0

Dzięki

Odpowiedz

56

Directory.CreateDirectory (@ "C: \ Mecz \ Upload") sortuje to wszystko dla ciebie. Nie musisz tworzyć wszystkich podkatalogów! Metoda tworzenia katalogu tworzy dla ciebie wszystkie katalogi i podkatalogi.

+0

Reference 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

Katalog maja nie istnieje w obiekcie if, ale nadal istnieje podczas próby utworzenia tej metody. Nie przejmuj się tym, co istnieje i użyj zamiast tego haczyka. –

+7

Właściwie wywołanie CreateDirectory nie zawiedzie nawet jeśli katalog istnieje, więc używanie go jest zbędne. – RichardOD

1

dla pracowników Google: w czystym Win32/C++, należy 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

Tylko Windows XP i 2003, mówi dokumentacja – MikMik

+0

Facet zapytał o C#, ale to jest dokładnie to, czego szukam :-) –

+1

Od kiedy to boost czysta win32 – Kobor42

0

Oto przykład z DirectoryInfo obiektu, który będzie utworzyć katalogu i wszystkich podkatalogach:

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

Calling Create() nie spowoduje błędu, jeśli ścieżka już istnieje.

Jeśli jest to ścieżka do pliku można zrobić:

var path = @"C:\Foo\Bar\jazzhands.txt"; 
new System.IO.FileInfo(path).Directory.Create(); 
Powiązane problemy