Herausfinden, ob fstream mit ios_base::binary geöffnet wurde
-
Soweit ich das sehe, bekommst du das nachträglich nicht mehr raus. Mögliche Lösungen:
- open_mode irgendwo global speichern
- Wrapper für deinen stream bauen
- eigenen Stream bauen (etwas ähnliches hat Werner Salomon mal (vor)gemacht: http://www.c-plusplus.net/forum/viewtopic-var-t-is-219803-and-highlight-is-stream+bin%E4r.html)HTH
EDIT: zu 3) : << / >> entsprechend open_mode definieren
-
Na gut, danke. Mit flags geht's leider nicht.
-
Hab jetzt auch nichts gefunden. Würde zumindest gehen wenn man den Stream verändert. Eine 4 (int) reinschreiben (oder was auch immer für eine Zahl) und binär als char wieder einlesen und schauen ob es eine '4' ist (Text) oder nicht (binär). Ist aber eine ziemlich unsaubere und unpraktikable Methode.
-
Wäre das nicht ein Verbesserungsvorschlag für C++0x? Noch ist C++0x nicht verabschiedet.
Übrigens, es ist diesen Monat ein neuer C++0x-Draft raus gekommen:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf
-
Fellhuhn schrieb:
Hab jetzt auch nichts gefunden. Würde zumindest gehen wenn man den Stream verändert. Eine 4 (int) reinschreiben (oder was auch immer für eine Zahl) und binär als char wieder einlesen und schauen ob es eine '4' ist (Text) oder nicht (binär).
Ich wage zu bezweifeln, dass Du, wenn Du eine 4 schreibst, eine 52 zurückbekommst. Egal ob binär oder nicht.
-
LordJaxom schrieb:
Fellhuhn schrieb:
Hab jetzt auch nichts gefunden. Würde zumindest gehen wenn man den Stream verändert. Eine 4 (int) reinschreiben (oder was auch immer für eine Zahl) und binär als char wieder einlesen und schauen ob es eine '4' ist (Text) oder nicht (binär).
Ich wage zu bezweifeln, dass Du, wenn Du eine 4 schreibst, eine 52 zurückbekommst. Egal ob binär oder nicht.
Eigentlich bekomm ich immer 52 zurück. Komisch. Ich hätte eigentlich erwartet, das wenn ich einen int binär rausschreibe ich mehr als 1 Byte belege...
-
Vielleicht bedeutet ios::binary nicht das, was du denkst.
-
Vermutlich. Hm, also sind Streams gar nicht in der Lage "richtig" binär zu schreiben? Doof.
-
Natürlich kannst Du in Streams richtig binär schreiben, vgl. dazu ostream::write vs. operator<<(ostream&) (genau wie in Standard-C fwrite vs. fprintf).
Der Unterschied binär/text beim Openmode ist allerdings nur relevant im Bezug auf die Zeilenenden. Ein ofs << "\n" schreibt unter Windows im Textmodus z.B. zwei Bytes (\r\n), im Binärmodus jedoch nur eins.
-
Also geht es dem TE hier auch nur um das olle Zeilenende? Narf...
