Rekursives Auflisten von Dateien



  • Hallo,
    ich versuche gerade ein kleines Programm zu schreiben, welches rekursiv alle Dateien eines Verzeichnisses und deren Unterverzeichnisse auflistet. Hier mein Quellcode:

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    void RecDirScanner(char*);
    
    int main() {
        RecDirScanner("C:\\Programme");
    
        return 0;
    }
    
    // Rekursive Scan Funktion
    void RecDirScanner(char *sPath) {
    
        HANDLE              fHandle;
        WIN32_FIND_DATA     wfd;
        char                dPath[512];
        char                mPath[512];
    
        strcpy(dPath,sPath);
        strcpy(mPath,sPath);
        strcat(dPath,"\\*.*");
    
        fHandle=FindFirstFile("*.*",&wfd);
        FindNextFile(fHandle,&wfd);
    
        while (FindNextFile(fHandle,&wfd)) {
    
        if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
        // Falls Datei Ordner:
        strcat(mPath,"\\");
        strcat(mPath,wfd.cFileName);
        RecDirScanner(mPath);
        }
        else {
        // Sonst gib Dateiname aus:
        cout << wfd.cFileName << endl;
        }
        }
    }
    

    Mein Problem ist, dass dieses Programm direkt nach der Ausführung abstürtzt. Weshalb ist mir Schleierhaft. Könnt ihr mir helfen? 🙂 🙂

    Mfg

    Alpha_Coder



  • Was sagt denn der Debugger?



  • Der Fehler liegt in der Whileschleife.

    while (FindNextFile(fHandle,&wfd)) {
    
        if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
        // Falls Datei Ordner:
        strcat(mPath,"\\");
        strcat(mPath,wfd.cFileName);
        RecDirScanner(mPath);
        }
        else {
        // Sonst gib Dateiname aus:
        cout << wfd.cFileName << endl;
        }
        }
    

    mit jedem Schleifendurchlauf
    "strcat(mPath,"\");"
    "strcat(mPath,wfd.cFileName);"
    wird "mPath" länger und schreibt irgendwann ins Nirwana.

    strcat(mPath,"\");
    muß strcpy(mPath,"\"); heißen dann wird die Variable neu geschrieben.



  • - warum gibt es FindNextFile() außerhalb der while-Schleife?
    - du überprüfst nicht den Rückgabewert von FindFirstFile()
    - es fehlt FindClose()
    - es fehlt ein GetLastError(), das die Abbruchsbedingung der while-Schleife untersucht (und von FindFirstFile())



  • Vielen Dank für die Antworten. Ich habe meinen Code jetzt mit der Stringklasse von c++ umgeschrieben und die Fehler berichtigt. Läuft bestens. Vielen Dank. 🙂 🙂

    Mfg

    Alpha_Coder


Anmelden zum Antworten