std::fstream output Problem
-
Hallo,
ich muss für mein Projekt aus einer txt Datei einen bestimmten Datensatz ändern.Meine derzeitige Funktion.
void TxtReader::Replace(std::string value, std::string text){ std::fstream m_file; m_file.open(m_path.c_str(), std::ios::out | std::ios::in); std::string buffer; while(!m_file.eof()){ std::getline(m_file, buffer); if(buffer == value){ m_file.seekp(m_file.tellg()); m_file << text; } } m_file.close(); }Parameter : Value = der zu suchende Title und text = der neue Wert.
Meine Struktur der Daten in der Txt besteht immer aus einem title z.B. [Name] und in der nächsten Zeile steht dann der Wert.
Diese Funktion funktioniert aber nicht... Sie schreibt den Text erst 2Zeilen später und ich komm nicht dahinter wieso
. Ich finde auch keine passende Tutorials/Forumbeiträge zu diesem Thema.Ich hoffe ihr könnt mir helfen...
mfg PrX
-
Solange dein 'text' nicht immer genauso lang ist, wie der ursprüngliche Text (bzw. Zeile) wird es so nicht klappen (da du evtl. dann noch Reste in der Zeile stehen hast oder aber schon die nächste Zeile überschreibst).
Die übliche Vorgehensweise ist:
1. Datei komplett einlesen
2. Datenstruktur (bzw. einzelne Zeilen) ändern
3. Datei komplett zurückschreibenEinfachste Datenstruktur wäre dann std::vectorstd::string, und diese dann (so wie du es bisher schon tust) mittels std::getline(...) einlesen.
-
Vielen Dank für deine Antwort.
Dann werde ich es wohl so lösen.mfg PrX