Frage zu std::ios::binary



  • Guten Abend erstmal,
    ich will diesen Thread kurz fassen, um euch nicht großartig wegen einer Laien-Frage aufzuhalten :

    - Was bewirkt ios::binary genau?
    (Ich habe gelesen, dass ios::binary die Umwandlung der Zeilenendekennung verhinbdert, die Wirkung ist mir allerdings total unklar und damit: )

    - Wieso muss es mit ios::in / ios::out verknüpft werden?

    Ich weiß leider nicht ob man ios::in, ios::out etc. auch auf andere Gebiete anwenden kann, aber hier sind ausschließlich die Ein/- und Ausgabe mit Dateien gemeint!

    Danke im Voraus!



  • Vernünftige Systeme verwenden \n für Zeilenumbrüche in Textdatein, zb. Windows hingegen verwendet \r\n
    Jetzt ist es Usus dass Zeilen in Textdatein mit \n enden.
    Öffnest du eine Datei im Textmodus unter Windows dann werden \r\n in \n umgewandelt.
    Im Binärmodus nicht. Das ist der Unterschied.



  • Danke erst mal,
    was ist denn die Konsequenz wenn \r \n in \n umgewandelt wird? Findet dann kein Zeilenumbruch statt, weil Windows standardmäßig \r\n benutzt?
    Meine zweite Frage hat sich leider auch noch nicht so richtig geklärt.


  • Mod

    - Wieso muss es mit ios::in / ios::out verknüpft werden?

    Muss es nicht. ios::in und ios::out werden lediglich zusammen mit fstream verwendet um festzulegen, was genau dieser tut (nämlich Schreiben, Lesen, oder beides). Mit binary haben sie direkt nichts zu tun.

    - Was bewirkt ios::binary genau?

    Es unterdrückt bestimmte systemspezifische Konvertierungen. Du liest bzw. schreibst dann direkt jedes Byte in/aus der Datei. Das heißt, dass wenn in der Datei "\r\n" vorkommt, du durch den Streambuffer auch "\r\n" siehst (anstatt dass "\r\n" automatisch zu '\n' konvertiert wird). Und wenn du '\n' auf Windows schreibst, wird auch '\n' geschrieben (statt "\r\n" ).



  • Vielen Dank, das war sehr verständlich!
    Ich habe das Prinzip auf jeden Fall verstanden, aber aus welchen Grund sollten diese systemspezifischen Konvertierungen überhaupt unterdrückt werden?
    Könnte das für Kompatibilität zu Dateien die kein .txt Format haben nützlich sein?


  • Mod

    Username1 schrieb:

    Könnte das für Kompatibilität zu Dateien die kein .txt Format haben nützlich sein?

    Ja, sehr sogar. Viele Computerformate sind nicht für Menschen lesbar, sie sind im Prinzip nur wilde Folgen von Zahlen (Zahlen und Buchstaben sind für den Computer das gleiche!). Da kann man nicht einfach eine bestimmte "Ziffer" durch eine (oder hier: zwei) andere Ziffern austauschen, ohne den Inhalt radikal zu verändern.



  • Schon schockierend, ich dachte immer ios::binary hat nur eine Bedeutung für .bin Dateien. Immerhin haben sich meine Fragen jetzt geklärt, danke 🙂



  • Bei mir ist es eher selten, dass ich den binary modus NICHT verwende


Anmelden zum Antworten