sisela
Erfahrenes Mitglied
Hallo,
habe leider nichts zu diesem Thema gefunden. Sorry falls es das schon gibt.
Ich habe ein kleines Problem. Ich durchsuche rekursiv alle Verzeichnisse einer bestimmten Platte nach bestimmten Dateien z. B. *.mp3.
Zur Zeit gebe ich die Suchergebnisse auf dem Bildschirm aus. Nun möchte ich aber die gefundenen Dateien in eine Datei speichern.
Da ich aber meine Suchfunktion rekursiv aufrufe, wird der fstream immer neu angelegt und meine Datei wieder gelöscht. So dass immer nur ein Suchergebnis in der Datei steht. Das ist aber doof ;-((
Erstelle ich vor Funktionsaufruf ein fstream Objekt ist dieses in der Funktion nicht mehr bekannt. Und erstelle ich es in der Funktion passiert das oben geschilderte.
Hier mal der Quellcode:
Diese Funktion wird von der main app aufgerufen und ruft wie ihr seht sich immer selber wieder auf.
Vielleicht könnte man das fstream Objekt schon in der main() anlegen und dann den fstream irgendwie übergeben. Weiss aber nicht wie...
So ihr freaks, jetzt seit ihr drann und ich bedank mich schonmal...
habe leider nichts zu diesem Thema gefunden. Sorry falls es das schon gibt.
Ich habe ein kleines Problem. Ich durchsuche rekursiv alle Verzeichnisse einer bestimmten Platte nach bestimmten Dateien z. B. *.mp3.
Zur Zeit gebe ich die Suchergebnisse auf dem Bildschirm aus. Nun möchte ich aber die gefundenen Dateien in eine Datei speichern.
Da ich aber meine Suchfunktion rekursiv aufrufe, wird der fstream immer neu angelegt und meine Datei wieder gelöscht. So dass immer nur ein Suchergebnis in der Datei steht. Das ist aber doof ;-((
Erstelle ich vor Funktionsaufruf ein fstream Objekt ist dieses in der Funktion nicht mehr bekannt. Und erstelle ich es in der Funktion passiert das oben geschilderte.
Hier mal der Quellcode:
Code:
void CFile::search() {
char savepath[MAX_PATH]; // zur Zwischenspeicherung des Pfades
int len;
cout << ".";
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
strcpy(savepath, path); // Sicherung des Pfades
strcat(path, "\\*");
hFind = FindFirstFile(path, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) {
cout << "Datei nicht vorhanden oder anderer Fehler..." << endl << "GetLastError: " << GetLastError () << endl;
}
else {
do {
int result = strcmp(FindFileData.cFileName, ".");
int result2 = strcmp(FindFileData.cFileName, "..");
if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && result != 0 && result2 !=0) {
len=strlen(path);
strcpy(&path[len-2], "\0");
strcat(path, FindFileData.cFileName);
strcat(path, "\\");
search();
strcpy(path, savepath);
strcat(path, "\\*");
}
else {
char file_end[MAX_PATH];
strcpy(file_end,FindFileData.cFileName);
len=strlen(file_end);
strcpy(&file_end[len-4], "\0");
strcat(file_end, type);
if((strcmp(file_end, FindFileData.cFileName)) == 0) {
//Problemanfang
fstream FS("files.dat", ios::out | ios::trunc);
FS.close();
FS.open("files.dat", ios::in | ios::out);
FS << savepath;
FS << FindFileData.cFileName;
FS << endl;
//Problemende
cout << savepath << FindFileData.cFileName << endl;
z++;
}
}
} while(FindNextFile(hFind, &FindFileData));
}
FindClose(hFind);
}// end search
Diese Funktion wird von der main app aufgerufen und ruft wie ihr seht sich immer selber wieder auf.
Vielleicht könnte man das fstream Objekt schon in der main() anlegen und dann den fstream irgendwie übergeben. Weiss aber nicht wie...
So ihr freaks, jetzt seit ihr drann und ich bedank mich schonmal...