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 }