Lemieux Geschrieben 29. Dezember 2008 Geschrieben 29. Dezember 2008 Hallo, ich habe da ein kleiner Code, der mir in einer Textdatei einzelne Zeilen ändern sollte. Ich hatte das gleiche in einem anderen Forum hineingestellt, aber leider konnte mir niemand wirklich helfen. Ich stelle es mal hier hinein und hoffe dass mir jemand helfen kann. #include <iostream> #include <fstream> #include <string> #include <limits> int main() { std::fstream file_stream("Ablage.txt", std::ios_base::in | std::ios_base::out); if (!file_stream) { std::cerr << "FEHLER: Datei konnte nicht geöffnet werden!"; return 1; } for (std::size_t i(0); i < 3; ++i) file_stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::string new_line; if (std::getline(std::cin, new_line)) file_stream << new_line << std::endl; } [/PHP] 'i' ist hier die zeile, in der der text geändert werden sollte. Leider zeigt es mir keinen Fehler an, aber es ändert mir auch nicht die zeile in der textdatei. Besten Dank. Zitieren
Klotzkopp Geschrieben 29. Dezember 2008 Geschrieben 29. Dezember 2008 Leider zeigt es mir keinen Fehler an, aber es ändert mir auch nicht die zeile in der textdatei. Das könnte natürlich grundsätzlich daran liegen, dass du denselben String, den du ausliest, auch wieder hineinschreibst. Zwei Dinge solltest du noch bedenken: Die Lese- und Schreibposition werden getrennt verwaltet, siehe seekp und seekg. Außerdem kannst du eigentlich gar nicht "ersetzen", sondern immer nur überschreiben. Die neue Zeile muss also dieselbe Länge haben wie die alte. Zitieren
Lemieux Geschrieben 29. Dezember 2008 Autor Geschrieben 29. Dezember 2008 Danke für deine Antwort. Was gäbe es denn für Möglichkeiten noch, die Zeilen zu ändern? Und eine zeile einfügen und die alte löschen kann ich auch nicht? Zitieren
Klotzkopp Geschrieben 29. Dezember 2008 Geschrieben 29. Dezember 2008 Die Daten in einer Datei sind nicht nach Zeilen organisiert, sondern nach Bytes. Du kannst nichts einfügen, weil dazu alle Bytes hinter der Eingabeposition nach hinten verschoben werden müssten, und so etwas geben Dateisysteme nicht her. Der triviale Ansatz ist der, die geänderten Daten komplett in eine neue Datei zu schreiben, die alte Datei zu löschen und dann die neue umzubenennen. Alternativ kannst du eine Datenbank benutzen. Damit kannst du eine Abstraktionsschicht um deine Daten legen, so dass du nicht mehr mit rohen Bytes arbeiten musst. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.