Wiederöffnen einer Datei mit ifstream
-
Hallo liebe Gemeinde,
ich habe bereits in mehreren Foren (deutsch/englisch) Antworten auf mein Problem gefunden, die helfen sollten, es dennoch aber nicht tun.
Ich möchte gerne in einer Schleife eine Datei mit ifstream mehrfach öffnen, auslesen und wieder schliessen. Der erste Durchlauf durch die Schleife geht reibungsfrei, beim zweiten Öffnen bringt tellg() grundsätzlich nur noch den Wert -1 statt der aktuellen Pointerposition für getline(), trotz der Empfehlungen aus anderen Foren clear() oder auch seekg() zu verwenden.
Ich benutze den commandline-Compiler bcc32 von Borland, Version 5.5.1.
Kann mir jemand helfen ?Danke und Gruß, Olaf.
ifstream fus_datei; ... // u.a. wird dateiname definiert for (int cnt_schicht = 0; cnt_schicht < anz_schichten; cnt_schicht++) { fus_datei.open(dateiname); fus_datei.clear(); while (1 != 0) { ... // u.a. Definition von strstr_string fus_datei.getline(fus_zeile, 100, '\n'); if (strstr(fus_zeile, strstr_string) != NULL) { cout << "."; break; // Schleife wird vor EOF verlassen. } } fus_datei.seekg(0, ios_base::end); fus_datei.close();
-
1. Bitte cpp Tags verwenden.
2. Wieso verwendest du nichtstd::stringin Verwendung mit der freien Funktionstd::getline?
http://www.cplusplus.com/reference/string/string/
http://www.cplusplus.com/reference/string/getline/
Das aber nur als Hinweis oder Frage aus Neugier.
3. Zu deinem Problem, probier mal das hier aus:// ifstream fus_datei; <- weg damit ... // u.a. wird dateiname definiert for (int cnt_schicht = 0; cnt_schicht < anz_schichten; cnt_schicht++) { // das: ifstream fus_datei(dateiname); // anstatt: // fus_datei.open(dateiname); // ganz sicher nicht mehr nötig: // fus_datei.clear(); while (1 != 0) { ... // u.a. Definition von strstr_string fus_datei.getline(fus_zeile, 100, '\n'); if (strstr(fus_zeile, strstr_string) != NULL) { cout << "."; break; // Schleife wird vor EOF verlassen. } } // Beides auch unnötig: // fus_datei.seekg(0, ios_base::end); // fus_datei.close();Grüssli
-
Hallo,
Danke für Deine Antwort.
Deinen Code-Vorschlag hatte ich in meiner allerersten Version, der hat leider auch nicht funktioniert.
Danke, Olaf.
-
Hast du das
tellggleich nach dem erstellen des Inputstreams gesetzt? Also in deinem Code:ifstream fus_datei(dateiname); // Und gleich danach: std::cout << fus_datei.tellg() << std::enl;Und das liefert dir dann
-1? Veränderst du in der Schleife etwas andateiname?Grüssli