Datei lesen und schreiben (fstream)
-
Hallo zusammen,
Ich probier jetzt schon seit 2 Stunden den Fehler in meinem Progrämmchen zu finden, doch anscheinend bin ich zu blöd dafür.
Ich öffne eine Datei, lese sie aus, und versuche einen anderen Inhalt wieder reinzuschreiben. Doch das reinschreiben funktioniert nicht; nach dem angeblich erfoglreichen Schreibvorgang (keine Fehlermeldung) steht immer noch der alte Inhalt in der Datei.
Hier mal die relevanten Codeteile:
// (...) fstream file(argv[i],ios::in|ios::out); // Datei öffnen if (!file.is_open()) { cout << "Fehler: Datei konnte nicht geoeffnet werden!\n"; continue; } while (getline(file,temp)) content += temp + "\r\n"; // (...) content = ReplaceString(search,replace,content); cout << "\tGefunden: " << zaehler << "\n"; file << content; cout << "\tDatei geschrieben.\n"; file.close(); // (...)Einer eine Idee? Den Dateizeiger auf 0 Zeichen nach Beginn und dann schreiben bewirkt auch nichts...
Grüsse
jeko
-
Erstens kannst du das "\r" in deinem Speicherstring bestimmt weglassen - die fstreams sorgen sich schon selber darum, daß es im richtigen Moment wieder auftraucht.
Zweitens: Versuch' mal, die Datei zwischendurch zu schließen und neu zu öffnen:
fstream file(argv[i],ios::in); // Datei öffnen if (!file.is_open()) { cout << "Fehler: Datei konnte nicht geoeffnet werden!\n"; continue; } while (getline(file,temp)) content += temp + "\n"; ... file.open(argv[i],ios::out|ios::trunc); file<<content;Dritten: Bist du sicher, daß sich überhaupt etwas am Inhalt geändert hat?
-
Hallo,
du musst nach dem Lesen und vor dem Schreiben die Fehlerbits des Streams löschen. Das geht durch den Aufruf von file.clear().
-
CStoll schrieb:
Erstens kannst du das "\r" in deinem Speicherstring bestimmt weglassen - die fstreams sorgen sich schon selber darum, daß es im richtigen Moment wieder auftraucht.
Zweitens: Versuch' mal, die Datei zwischendurch zu schließen und neu zu öffnen:
fstream file(argv[i],ios::in); // Datei öffnen if (!file.is_open()) { cout << "Fehler: Datei konnte nicht geoeffnet werden!\n"; continue; } while (getline(file,temp)) content += temp + "\n"; ... file.open(argv[i],ios::out|ios::trunc); file<<content;Dritten: Bist du sicher, daß sich überhaupt etwas am Inhalt geändert hat?
Ob das Carriage und die Newline richtig ankommen war ich mir nicht sicher, ich kann es jedoch auch ohne mal ausprobieren, danke für den Tipp.
Die Datei zu schliessen habe ich glaub ich auch schon ausprobiert, führte zum gleichen Ergebnis, was mich auch sehr irritiert. Doch ich kanns auch ohne Probleme erneut versuchen.
Und drittens: Ja ich bin mir sicher, da ich mir den Inhalt von content beim Debugging natürlich auch schon mal vor und nach ReplaceString ausgeben lassen habe.
@Humesikkins: Dankesehr, das sieht schonmal sehr vielversprechend aus! Ich glaube dein Tipp könnte mich weiterbringen, dankeschön

-
Dankeschön Humesikkins, die Fehlerbits löschen war erfolgreich. Folgendes Codestück brachte also den Erfolg:
file.clear(); // Fehlerbits löschen file.seekp(0,ios::beg); // Alles auf Anfang file << content;