Unterschied: dat_aus.open("T.txt",ios::binary) und dat_aus.open("T.txt",ios_base::in)
-
Hallo,
Ich würde gerne mal wissen was der Unterschied zwischendat_aus.open("T.txt",ios::binary)und
dat_aus.open("T.txt",ios_base::in)ist. Bei beiden steht nachher das selbe in der Datei. Ich dacht ios::binary wäre dazu da um Variablen, in Binär umgewandelt, in ein Datei zu schreiben?
-
Hallo,
Ich dacht ios::binary wäre dazu da um Variablen, in Binär umgewandelt, in ein Datei zu schreiben?
Nein. Das ios::binary Flag wird dazu verwendet Daten im sog. Raw-Modus in eine Datei zu schreiben/aus einer Datei zu lesen.
Der Raw-Modus nimmt im Gegensatz zum Text-Modus, dem Default-Open-Modus, keine Veränderungen an Steuerzeichen, die meistens Betriebssystem-abhängig sind, vor. D.h. er überträgt die Daten ohne jede Veränderung(en) in die Datei.Steuerzeichen? Das sind z.B. Zeichen, die zum kennzeichnen eines Zeilenumbruchs, etc. verwendet werden. Diese sind - wie bereits erwähnt - meistens OS abhängig. Unter Linux wird ein Zeilenumbruch z.B. durch ein einfaches Newline ('\n') dargestellt, unter Windows dagegen durch einen Carriage-Return und ein Newline ("\r\n").
Wenn du eine Datei im normalen Text-Modus öffnest, werden diese Steuerzeichen an das Betriebssystem angepasst. D.h. jedes Vorkommen von '\n' wird unter Windows durch "\r\n" ersetzt.Btw: Falls du Windows-User bist...
#include <iostream> #include <fstream> #include <iterator> #include <copy int main() { //std::ofstream in("input.txt", std::ios::binary); std::ofstream in("input.txt"); if(in) { std::string s("Hallo Welt!\n...\n\nMoment\n... Hallo C++-Welt waere doch viel toller\n:-)"); std::copy(s.begin(), s.end(), std::ostream_iterator<std::string>(in)); } }Betrachte dir die erzeugten Dateien... Was fällt auf? :).
Gruß Caipi