a1nett Geschrieben 30. August 2001 Geschrieben 30. August 2001 hallo kann mir hier vielleicht jemand helfen? mein problem: soll alle dateien auf einer festplatte raussuchen die "projektID.xml" heißen. leider hab ich gar keinen plan wie man das macht. hab schon einen teil quelltext. mir fehlt nur der algorithmus der die einzelnen orderner durchsucht. wie kann man das in c++ realisieren? kann immer nur die ordner im root durchsuchen aba keine unterordner. benutzt man dafür die funktionen _findfirst und _findnext? wer was weiß bitte unbedingt melden :confused: Zitieren
Dagegen Geschrieben 30. August 2001 Geschrieben 30. August 2001 Auf welchem System ???? muss es umbedingt C++ sein ??? ansonsten kannst du ja bei Unix einfach find einsetzten (als shell skript, das von deinem C-Programm aufgerunfen wird) Zitieren
InsanityX Geschrieben 30. August 2001 Geschrieben 30. August 2001 Ja, es muß C++ sein (zumindest bei mir habe das gleiche Problem ) Zitieren
MadMatrix Geschrieben 30. August 2001 Geschrieben 30. August 2001 Tja, die gibt's ein Problem. Die Windows-File-Funktionen bieten keine Routinen zur rekursiven Dateisuche. Vorschlag (mit _findfirst() und _findnext()): Du musst im Stammverzeichnis anfangen und (*)überprüfst dort, ob die datei vorhanden ist. Ist dies der Fall, merkst du dir den Pfad, und durchsucht dann das Verzeichnis nach Verzeichnissen. In jedem Verzeichnis startest du dann wieder bei (*). Tip: Such im MSDN nach SCANDIR.C !!! Viel Spaß, werd mal schauen, ob ich dass nicht besser hinkriege als Mikroschrott im Beispiel! Zitieren
InsanityX Geschrieben 30. August 2001 Geschrieben 30. August 2001 Das wäre net, habe gerade erst mit C++ angefangen und bin da nicht sooo der Held... Zitieren
MadMatrix Geschrieben 30. August 2001 Geschrieben 30. August 2001 Na dann, hier mal ein Versuch: #include "stdio.h" #include "io.h" #include "string.h" #include "afxcoll.h" void AddResult(const char* lpszPath, const char* lpszFilename) { printf("%s%s\n", lpszPath, lpszFilename); } void SearchDirectory(const char* lpszDirectory, const char* lpszFilename) { _finddata_t finddata; long Handle; // dateien suchen char* lpszWildcard = new char[strlen(lpszDirectory) + strlen(lpszFilename) + 1]; strcpy(lpszWildcard, lpszDirectory); strcpy(lpszWildcard + strlen(lpszDirectory), lpszFilename); Handle = _findfirst(lpszWildcard, &finddata); if (Handle != -1) do { AddResult(lpszDirectory, finddata.name); } while (_findnext(Handle, &finddata) == 0); _findclose(Handle); delete lpszWildcard; // unterverzeichnisse suchen lpszWildcard = new char[strlen(lpszDirectory) + strlen("*.*") + 1]; strcpy(lpszWildcard, lpszDirectory); strcpy(lpszWildcard + strlen(lpszDirectory), "*.*"); Handle = _findfirst(lpszWildcard, &finddata); if (Handle != -1) do { if ((finddata.attrib & _A_SUBDIR) && (finddata.name[0] != '.')) { char* lpszSubDir = new char[strlen(lpszDirectory) + strlen(finddata.name) + strlen("\\") + 1]; strcpy(lpszSubDir, lpszDirectory); strcpy(lpszSubDir + strlen(lpszDirectory), finddata.name); strcpy(lpszSubDir + strlen(lpszDirectory) + strlen(finddata.name), "\\"); SearchDirectory(lpszSubDir, lpszFilename); delete lpszSubDir; } } while (_findnext(Handle, &finddata) == 0); _findclose(Handle); delete lpszWildcard; } int main(int argc, char* argv[]) { SearchDirectory("C:\\Programme\\Microsoft Visual Studio\\", "*.cpp"); return 0; } Ich bin davon ausgegangen, dass du das ohne MFC machst, also hab ich dass mal "in richtigem C" geschrieben. Ich hoffe, dein Stack ist groß genug für ein paar rekursive Aufrufe. Zitieren
InsanityX Geschrieben 30. August 2001 Geschrieben 30. August 2001 Muchas Gracias, habin 17 Min feierabend, deshlab werde ich das morgen testen... *froi* // Freitag morgen, fast 9 in Deutschland: FUNKTIONIERT :cool: <FONT COLOR="#a62a2a" SIZE="1">[ 31. August 2001 08:58: Beitrag 1 mal editiert, zuletzt von InsanityX ]</font> Zitieren
a1nett Geschrieben 31. August 2001 Autor Geschrieben 31. August 2001 hat bei mir auch geklappt musste aba ganz schön was weg lassen danke dann Zitieren
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.