Lesen und schreiben in dieselbe Datei?
-
Hallo geehrtes Forum,
ich möchte eine Datei öffen (binär-Modus), darin Byte für Byte lesen und wenn der Wert des gelesenen Bytes >100 ist den Wert auf 255 setzen und dann diesen Wert in dieselbe Datei zurückscheiben.
Ist das möglich? Wenn ja wie mache ich das am besten in C++?Was ich dezidiert nicht möchte ist die Datei zu lesen, zu ändern und damit dann mit diesen Änderungen eine neue Datei erstellen und diese dann am Ende umzubenennen in den Namen der ursprünglichen Datei.
Danke für jeden Tipp!
-
Dieser Beitrag wurde gelöscht!
-
Ist das möglich?
Ja
Wenn ja wie mache ich das am besten in C++?
Mit std::fstream und den Funktionen tellg , read, seekp, write.
-
-
Dieser Beitrag wurde gelöscht!
-
Was du hierbei beachten musst ist die Synchronisation des Streams.
Du musst dir das so vorstellen, dass ein interner Buffer im Stream zu einem externen Device geschrieben wird und die Lese- und Schreibvorgänge dazwischen synchronisiert werden müssen.
Hierzu hast du
flush()
um Schreibvorgänge undsync()
um Lesevorgänge zu synchronisieren. Wichtig ist es, wenn du von Schreiben auf Lesen wechselst, dass duflush()
aufrufst, um den internen Buffer ins Device zu schreiben, bevor du die neuen Daten einliest.Anders, könntest du die Datei einlesen und, den Inhalt ändern und sie einfach neu beschreiben. Das wäre der gängigere Weg das zu machen, falls die Datei auch nicht riesen groß sein sollte und ein Einlesen, Ändern, Schreiben einfach intuitiver wäre.
-
Ich hatte meinen Beitrag gelöscht, aber ich stelle die Zusatzfrage trotzdem mal: Ich meine, einzelne Bytes aus der Datei zu lesen ist ziemlich langsam... und wenn die Datei so groß ist, dass man sie nicht am Stück in den Speicher laden möchte, dann sowieso... Würde es nicht Sinn machen, wenn überhaupt, dann Blöcke zu lesen, diese im RAM zu bearbeiten (suchen und ersetzen), und dann wieder als Block in die Datei schreiben?
Außerdem: Wieso möchtest Du unbedingt nicht eine neue Datei schreiben, die alte löschen, und dann umbennen?
-
@eigenartig sagte in Lesen und schreiben in dieselbe Datei?:
Was du hierbei beachten musst ist die Synchronisation des Streams.
Sagt welche Dokumentation?