Probleme mit opendir und readdir
-
Hi,
Ich habe versucht ein simples such-tool unter Linux zu schreiben, aber ich stoße immer wieder auf Probleme mit opendir und readdir. Wenn ich nach einer Datei mit einer bestimmten Dateiendung suche, taucht das Tool zunächst in alle Unterverzeichnisse ein, aber nach einigen Verzeichnissen, kann opendir plötzlich keine weiteren Verzeichnisse mehr öffnen.
Das sieht dann wie folgt aus:Add path: /home/lunatic
Pattern 0: .mp3
Aktuelles WD: /home/lunatic/c
Pfad: /home/lunatic/c
Aktuelles WD: /home/lunatic/c/windows
[ viele andere Verzeichnisse]
Aktuelles WD: /home/lunatic/wine/programs/progman
Pfad: /home/lunatic/wine/programs/progman
Aktuelles WD: /home/lunatic/wine/programs/progman/CVS
Pfad: /home/lunatic/wine/programs/progman/CVS
Aktuelles WD: /home/lunatic/wine/windows
Pfad: /home/lunatic/wine/windows
(null)
search: Cannot read /home/lunatic/wine/windows/Ich weiß nicht, warum es hier bricht, denn das Verzeichnis hat die gleichen Schreib- und Leserecht wie die anderen Verzeichnisse zuvor auch. Hat jemand eine Ahnung?
Source Code (Snapshot):
int search_on_unix(char *path) { DIR *dir; struct dirent *dirzeiger; char *p_path; char puffer[MAXPATH]; int file_no; p_path=path+strlen(path); *p_path++ = '/'; *p_path = '\0'; if(ext_stat(path) != 1) { printf("Path is not a directory\n"); return 0; } if((dir=opendir(path)) == NULL) { printf("%s\n", opendir(path)); printf("search: Cannot read %s\n",path); closedir(dir); return 0; } while((dirzeiger=readdir(dir)) != NULL) { if(strcmp((*dirzeiger).d_name, ".") && strcmp((*dirzeiger).d_name,"..")) { strcpy(p_path,(*dirzeiger).d_name); if(ext_stat(path) == 1) { if(chdir(path) == -1) { printf("search: Cannot change to %s\n",path); } else { getcwd(puffer, MAXPATH); printf("Aktuelles WD: %s\n",puffer); printf("Pfad: %s\n", path); search_on_unix(path); } } else if(ext_stat(path) == 0) { file_no = analyze_file(path); //printf("Analyzed File: %i\n",file_no); } else { printf ("stat failed %s\n", path); } } } return 1; }
[edit] Code Tags benutzen! :o [/edit]
[ Dieser Beitrag wurde am 28.12.2002 um 01:12 Uhr von kingruedi editiert. ]
-
Ich hasse es mir selber antworten zu müssen, aber alles was fehlte, war ein closedir(dir) nach dem kompletten durchlauf der while-Schleife. Nu funzt es.