C++ Datei binär schreiben?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Ich jenn mich leider nur mit C und C# aus, aber du könntest in der ASCII Tabelle nachschauen, was du ändern musst und dann einfach das Zeichen ersetzen.


EnderLuca  30.07.2022, 11:40

Warum antwortest du dann? Oder hast du die Frage erst falsch gelesen und jetzt deine Antwort geändert weil man sie nicht löschen kann?

theCPP 
Beitragsersteller
 30.07.2022, 13:41
@EnderLuca

Er hat eigentlich ne ganz schlaue Idee

du holst dir die Datei in den RAM, wechselst das Byte aus und schreibst die Datei zurück.

Direkt auf der Platte geht das nicht.


schnfz  30.07.2022, 09:09

Natürlich geht das. Auch in simpelsten C: https://m.cplusplus.com/reference/cstdio/fseek/

guenterhalt  30.07.2022, 09:21
@schnfz

das denkt aber nur ein Programmierer, der nicht die Abläufe versteht.
fseek , fputs .... machen doch nur das, was ich geschrieben habe, Daten in den RAM holen und wieder auf die Platte schreiben.
Der Vorteil einer höheren Programmiersprache ist nun mal die Entlastung des Programmieres. Trotzdem sollte man eine Vorstellung haben, was da gemacht wird. Die Compiler verhindern zwar schon recht gut im Vorfeld, dass andere Funktionen (mit z.B. Zeigern ) in einem nicht ihnen gehörenden Speicher-Bereich herumschreiben. Wenn es aber passiert, muss man Erklärungen und damit Fehler finden.

schnfz  30.07.2022, 09:32
@guenterhalt

Selbst wenn ich in Assembler die nackten POSIX-Syscalls wie open, lseek, write verwende, muss ich nicht die ganze Datei ins RAM holen und dann wieder rausschreiben. Und natürlich macht das Betriebssystem selbst das auch nicht, auch wenn es transparent puffert. Da sind wir dann schon aber ein paar Ebenen unter der Frage des FS…

guenterhalt  30.07.2022, 10:11
@schnfz

natürlich nicht, seek findet schon den richtigen Block (Sektor). Für den Außenstehenden ist open, seek durchaus mit "in der ganzen Datei suchen" verbunden.

äh , gar nicht , du kannst bytes zwar lesen an gewissen stellen , aber schreiben kannst du eigentlich nur dateien , neu /überschreiben oder anhängen . ausser du hast ein block zugriff , was aber wieder ein ganz anderes dateisystem erfordert .


Kelec  27.07.2022, 21:56

Geht ja nach der Frage auch um die einzelnen Bytes innerhalb der Datei, das geht Problemlos mit ofstream.

Mit dem Dateisystem an sich hat das mal nichts zu tun, immerhin schreibst du ja nicht den Fileeintrag in das Dateisystem sondern nur das File selbst. Blockzugriff am Dateisystem vorbei ginge zwar auch (bei Windows bin ich mir nicht sicher) aber macht in dem Fall auch keinen Sinn.