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./list
    

    Die Zahl vor dem Pfad ist jeweils der Dateityp (Verzeichnis = 4)



    1. das ist C, kein C++
    2. du stellst kein Frage
    3. 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.


Anmelden zum Antworten