2013-02-13 13 views
7

Biorąc pod uwagę możliwą pełną ścieżkę do pliku, na przykład podam C: \ dir \ otherDir \ possiblefile Chciałbym poznać dobre podejście do wyszukiwania się, czySprawdź, czy istnieje plik lub katalog nadrzędny, podając możliwą pełną ścieżkę do pliku

C: \ dir \ otherDir \ possiblefile pliku

lub C: \ dir \ otherDir katalog

istnieje. Nie chcę tworzyć folderów, ale chcę utworzyć plik, jeśli nie istnieje. Plik może mieć rozszerzenie lub nie. chcę osiągnąć coś takiego:

enter image description here

wymyśliłem rozwiązanie, ale jest to trochę przesada, moim zdaniem. Powinien istnieć prosty sposób robienia tego.

Oto mój kod:

// Let's example with C:\dir\otherDir\possiblefile 
private bool CheckFile(string filename) 
{ 
    // 1) check if file exists 
    if (File.Exists(filename)) 
    { 
     // C:\dir\otherDir\possiblefile -> ok 
     return true; 
    } 

    // 2) since the file may not have an extension, check for a directory 
    if (Directory.Exists(filename)) 
    { 
     // possiblefile is a directory, not a file! 
     //throw new Exception("A file was expected but a directory was found"); 
     return false; 
    } 

    // 3) Go "up" in file tree 
    // C:\dir\otherDir 
    int separatorIndex = filename.LastIndexOf(Path.DirectorySeparatorChar); 
    filename = filename.Substring(0, separatorIndex); 

    // 4) Check if parent directory exists 
    if (Directory.Exists(filename)) 
    { 
     // C:\dir\otherDir\ exists -> ok 
     return true; 
    } 

    // C:\dir\otherDir not found 
    //throw new Exception("Neither file not directory were found"); 
    return false; 
} 

Wszelkie sugestie?

Odpowiedz

11

swoje kroki 3 i 4 mogą być zastąpione przez:

if (Directory.Exists(Path.GetDirectoryName(filename))) 
{ 
    return true; 
} 

który jest nie tylko krótsze, ale powróci właściwą wartość dla ścieżek zawierających Path.AltDirectorySeparatorChar takiego jak C:/dir/otherDir.

+0

Tak, poza tym, całkiem nieźle. –

+0

Teraz jest zdecydowanie krótszy, oszczędza mi ręcznego parsowania i obsługuje alternatywne separatory. Dokładnie to, czego szukałem! – Joel