Textdatei - Dateipositionszeiger lässt sich nicht verschieben
-
Joe_M. schrieb:
Du öffnest die Datei im Append-Modus.
Ja das weiß ich. Deshalb mache ich ja das clear, und danach mit dem seekp an den Dateianfang. Ist das nicht korrekt?
-
ios:app == nur anhängen.
-
Jetzt habe ich es mit ios::out probiert. Aber damit überschereibe ich Daten, also die gehen verloren. Beispiel: Ich habe 10 Datensätze in der Datei, und wähle das 5 zum ändern aus. Die 5 wird geändert die anderen von 1 bis 4 bleiben erhalten, aber die Datensätze 6 bis 10 gehen verloren.
Kann in Textdateien nicht in der "mitte" überschrieben werden, und der rest bleibt erhalten?
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
sly_020 schrieb:
Kann in Textdateien nicht in der "mitte" überschrieben werden, und der rest bleibt erhalten?
Das müsste gehen, wenn du sie zusätzlich mit ios::binary öffnest. Du kannst allerdings nichts einfügen, nur ändern.
-
warum sollte er da nichts einfügen können?
greetz KN4CK3R
-
KN4CK3R schrieb:
warum sollte er da nichts einfügen können?
Das würde mich jetzt aber interessieren. Zeig mir doch mal, wie man in eine Datei etwas einfügt, ohne sie einzulesen und anschließend (mit den eingefügten Daten) neu zu schreiben.
-
Also mit binary wird jetzt nichts über schrieben aber ich bekomme auch keine veränderungen in die Textdatei.
Jetzt sieht es so aus im Code:
g.open("db.txt", ios::binary); g.seekp(i*sizeof(daten)); g.write((const char*)(&my_dat), sizeof(daten)); g.close();
-
Schon fast richtig. So müsste es gehen:
fstream g; g.open("db.txt", ios::in | ios::out | ios::binary); g.seekp(i*sizeof(daten), ios::beg); g.write((const char*)(&my_dat), sizeof(daten)); g.close();
-
Vielen dank! Es hat geklappt.
-
sly_020 schrieb:
Vielen dank! Es hat geklappt.
Ja, ist ein bisschen irritierend, dass man ios::in auch noch angeben muss. Hatte ich bei meiner ersten Antwort vergessen.
-
SeppJ schrieb:
KN4CK3R schrieb:
warum sollte er da nichts einfügen können?
Das würde mich jetzt aber interessieren. Zeig mir doch mal, wie man in eine Datei etwas einfügt, ohne sie einzulesen und anschließend (mit den eingefügten Daten) neu zu schreiben.
so?
SeppJ schrieb:
Schon fast richtig. So müsste es gehen:
fstream g; g.open("db.txt", ios::in | ios::out | ios::binary); g.seekp(i*sizeof(daten), ios::beg); g.write((const char*)(&my_dat), sizeof(daten)); g.close();du liest nichts ein, schreibst bloß
greetz KN4CK3R
-
KN4CK3R schrieb:
du liest nichts ein, schreibst bloß
Da wird nichts eingefügt. Der Inhalt wird überschrieben.
-
ja, aber was hindert dich dadran den Zeiger aufs Ende der Datei zu setzen und dann zB mit .put() etwas neues anzuhängen?
greetz KN4CK3R