Knuddelmuddel Geschrieben 9. Dezember 2009 Teilen Geschrieben 9. Dezember 2009 Hallo, ich arbeite gerade an einem Programm in C. Dieses Programm soll bei einem Übergebenen parameter alle Ordner rekursiv durchsuchen auch die Unterordner. Ich hab natürlich schon daran gearbeitet, leider läuft(bzw findet) das Programm im moment so: 1. Ordner-> 1. Unterordner -> Files im 1.Unterordner -> 1.Ordner -> 2. Unterordner -> Files im 2. Unterordner-> 2. Ordner -> 1. Unterordner -> Files im 1.Unterordner -> 2.Ordner -> 2. Unterordner -> Files im 2. Unterordner-> 2. Ordner-> 3. Ordner-> 4. Ordner-> 5.Ordner Die Ausgabe: ergo: Der Pfad wird nciht richtig angegeben und er sucht dann nachm 2ten Ordner nicht mehr in den Unterordnern irgendwo im Code muss ein Fehler sein :/ aber ich finde ihn einfach nicht #include "stdafx.h" #include "stdio.h" #include "windows.h" TCHAR* files(TCHAR* path) { int len; TCHAR savepath[MAX_PATH]; WIN32_FIND_DATA fd; HANDLE h; strncat(path,(_T("*.*")),sizeof("*.*")); _tcscpy(savepath,path); h = FindFirstFile(path, &fd); if (h != INVALID_HANDLE_VALUE) { do { if (((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)) { int result = strcmp(fd.cFileName, "."); int result2 = strcmp(fd.cFileName, ".."); if (result != 0 && result2 != 0) { //anhaengen(path,fd); printf("Suche im Verzeichnis \"%s\"\n", fd.cFileName); len = strlen(path); _tcscpy(&path[len-3],(_T("\0"))); strncat(path,fd.cFileName,sizeof(fd.cFileName)); strncat(path,"\\\\",sizeof("\\\\")); _tcscpy(foldername,fd.cFileName); files(path); } } else { len = strlen(path); _tcscpy(&path[len-3],(_T("\0"))); printf("Im Pfad \"%s\", File \"%s\" gefunden\n",path,fd.cFileName); strncat(path,"*.*",sizeof("*.*")); } path=savepath; } while (FindNextFile(h,&fd)); } //_tcscpy(path,(_T("C:\\\\*.*"))); FindClose(h); return 0; } int _tmain(int argc, _TCHAR* argv[]) { files(argv[1]); getchar(); return 0; } Als Parameter wird C:\\ übergeben! Ich hatte auch schon in der Suche geschaut hier im Forum und diversen anderen Foren aber irgendwie waren da entweder Sachen drinnen die ich nicht usen soll zB cout<< oder was das ist :< oder es war in einer anderen Sprache zB C++/C# hab zwar versucht die Codes soweit auseinander zu basteln das cih die auch versteh (programmiere noch nicht solange) aber weit bin ich damit nicht gekommen :/ Wäre super wenn mir einer von euch helfen kann Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 9. Dezember 2009 Teilen Geschrieben 9. Dezember 2009 Der Code ist unvollständig, foldername ist nirgends deklariert, die Variable ist aber nicht weiter relevant. Das Problem ist, dass das "Zurücksetzen" auf savepath nicht richtig umgesetzt ist. Du verbiegst nämlich nur den Zeiger path auf dein Array savepath. Ab dem zweiten Schleifendurchlauf verweisen die beiden also auf denselben Speicherbereich, und damit hängst du weitere Unterverzeichnisse auch an savepath an, die nachfolgenden Zurücksetzungen bewirken gar nichts mehr. Übrigens solltest du, wenn du denn TCHAR benutzen möchtest, das auch konsequent durchziehen. Momentan ist das ein wilder Mischmasch aus char/strlen/strncat und TCHAR/_tcscpy, der nur bewirkt, dass sich der Code nicht mit Unicode übersetzen lässt. Du solltest auch bedenken, dass du nicht einfach irgendetwas an path dranhängen solltest. Du weißt nicht, wie groß der Puffer ist, den der Aufrufer für den Parameter reserviert hat. Und kannst du mir erklären, warum du hinten einen doppelten Backslash anhängst? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Knuddelmuddel Geschrieben 10. Dezember 2009 Autor Teilen Geschrieben 10. Dezember 2009 naja hab bissl im Code rumprobiert und von den resten die nicht funktioniert haben nicht alles gelöscht .. xd doppelt weil der parameter das sonst net richtig übernimmt :/ bzw hats bei nem einfachen net richtig funktioniert also liegts am savepath werd da nochmal drüberschauen fand das halt nur merkwürdig weil es anfangs ja richtig funktioniert und später immer weniger Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.