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 zwischen

    dat_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


Anmelden zum Antworten