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:
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)
InsanityX Geschrieben 30. August 2001 Geschrieben 30. August 2001 Ja, es muß C++ sein (zumindest bei mir habe das gleiche Problem )
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!
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...
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.
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>
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden