Veröffentlicht 30. August 200124 j 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:
30. August 200124 j 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)
30. August 200124 j 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!
30. August 200124 j Das wäre net, habe gerade erst mit C++ angefangen und bin da nicht sooo der Held...
30. August 200124 j 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.
30. August 200124 j 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>
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.