Prüfen ob Verzeichnis vorhanden



  • Tach,

    Wie kann ich prüfen ob ein Verzeichnis vorhanden ist? ich habe die Funktion chdir() oder so ähnlich benutzt. Das Funktioniert ganz gut, ausser das er bei langen Pfadnamen ein Falsches Ergebnis liefert (z.B. C:\Programme) weil er warscheinlich 'C:\PROGRAM~1' erwartet. Ausserdem liefert diese Funktion auch nicht das von mir erwartete zurück wenn man nur das Laufwerk angiebt ('C:\')

    kann mir jemand bitte helfen???

    Danke rude



  • also du könntest mal schauen, was so in der dir.h / dirent.h drin steht..



  • jaa danke

    nur da hab ich schon durchgekuckt und nix gefunden

    Mein problem ist, dass wenn ein Dateipfad länger als 8 Zeichen eingegeben wird, liefert mir die funktion einen Fehler, obwohl das Verzeichnis vorhanden ist.

    (z.B. 'C:\langerdateipfad')

    Damit es Funktioniert muss der name mit tilde und ner zahl abgekürzt werden. Kann man dies das Programm nicht selber machen lassen? ('C:\LANGER~1')

    Das das Programm den langen Dateinamen praktisch in einen Kurzen umwandelt???



  • is zwar kein ANSI C, aber wurscht 🙂
    falls du unter windows arbeitest und dein Compiler die winapi dabei hat:

    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int dirExists(const char * Dir);
    
    int main()
    {
    	if (dirExists("meinSchnuckeligesLangesVerzeichnis"))
    	{printf("Verzeichnis existiert");}
    	else
    	{printf("leider verloren");}
    
    return 0;
    }
    
    int dirExists(const char * Dir)
    {
    	// Wenn sich das Verzeichnis erstellen läßt, existiert es nicht
    	// (oder man hat keine Berechtigung?)
    	if (CreateDirectory(Dir,NULL))
    	{
    	RemoveDirectory(Dir);
    	return 0;
    	}
    
    	else
    	{return 1;}
    }
    


  • vielen dank anonymus

    weil ich hier genaue vorgaben bekommen hab, lass ich es jetz einfach mit den kurzen dateinamen...

    vielen dank



  • ANSI C selbst kennt nicht mal Verzeichnisse. Es gibt allerdings im WinAPI eine Funktion "SetCurrentDirectory()", die ziemlich genau das machen dürfte, was du willst. Nimmt nen LPCTCHAR (Also char const * ohne und wchar_t const * mit _UNICODE) entgegen, gibt nen BOOL zurück. Kuck hier: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/setcurrentdirectory.asp

    Wenn du nur wissen willst, ob ein Verzeichnis existiert, wäre

    WIN32_FIND_DATA wfd;
    HANDLE h;
    LPCTSTR path = "C:\\Program Files";
    
    h = FindFirstFile(path, &wfd);
    if(h != INVALID_HANDLE_VALUE) {
      if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
        // path ist ein Verzeichnis
      } else {
        // path ist eine Datei (bzw. kein Verzeichnis halt)
      }
      FindClose(h); // Handle freigeben
    } else {
      // Path existiert nicht
    }
    

    Oder du holst dir irgendwoher ne POSIX-Lib und schreibst

    struct stat my_stat;
    char const *path = "C:\\Program Files";
    
    stat(path, &my_stat);
    if(S_ISDIR(my_stat.st_mode)) {
      // path ist ein Verzeichnis
    }
    

Anmelden zum Antworten