readdir (Linux): Segmentation Fault
-
Ich arbeite an einem kleinen Codeschnippsel der alle Unterverzeichnisse incl. Dateien eines Verzeichnisses (in diesem Fall das momentan Ausführungsverzeichnis) in Datei schreiben soll.
Zunächst werden die nächstgelegenen Unterverzeichnisse/Dateien ermittelt und in die Datei geschrieben, dann wird zurück an den Anfang der Datei gesprungen und die Hauptschleife beginnt, bei der es scheinbar hakt:
while(!feof(list)) { memset(currentDir, 0, sizeof(currentDir)); fgets(currentDir, sizeof(currentDir), list); // Pfad aus Datei lesen if(currentDir[0] != '4') // Wenn es sich nicht um ein Verzeichnis continue; // handelt, nächster Durchlauf currentDir[0] = 0; // Pfad in gültiges Format für opendir currentDir[strlen(currentDir)-1] = 0; // bringen for(int i = 0; i < sizeof(currentDir); i++) currentDir[i] = currentDir[i+1]; directory = opendir(currentDir); // Pfad öffnen position = ftell(list); //momentane Position in Datei merken fseek(list, 0, SEEK_END); // Ans Datei Ende springen while((dirInfo = readdir(directory))!=0) // Bis alle { //Unterverzeichnisse // gefunden wurden if(dirInfo->d_name[0] == '.') // Falls es ".." oder "." ist continue; // überspringen memset(subDir, 0 , sizeof(subDir)); // Pfad strcpy(subDir, currentDir); // des gefundenen strcat(subDir, "/"); // Verzeichnisses strcat(subDir, dirInfo->d_name); // in Datei schreiben. fprintf(list, "%s\n", subDir); } closedir(directory); fseek(list, position, SEEK_SET); }So sieht die Datei aus, auf die list zeigt.
8./USB encrypter.o 4./rktjkejf 8./USB encrypter.cpp.cbTemp 8./sglkpw#stkf,#üqpkh w 8./type.cpp 8./USB encrypter 8./USB encrypter.cpp 4./test 4./asdasdasd 8./funcs.h 8./asyd 4./sd 8./type.o 8./type 8./listDie Zahl vor dem Pfad ist jeweils der Dateityp (Verzeichnis = 4)
-
- das ist C, kein C++
- du stellst kein Frage
- du prüfst nicht, ob das Dirctory geöffnet werden konnte
-
Meine Frage lautet, woher dieser Fehler wohl rühren mag.
Aye, directory kann nicht geöffnet werden - was daran liegt, dass ich eine Kleinigkeit übersehen habe - danke.