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