std::ofstream verdoppelt newlines?
-
Habe einen sehr komischen Fehler.
wxMessageBox(code.c_str()); std::ofstream out(fn.c_str(),std::ios::out);//fn = filename/path out << code.c_str();code enthält text, welcher mehrere Zeilen lang ist.
Wenn ich den Text mit der MessageBox ausgeben lasse ist alles ok, aber wenn ich ihn in die Datei schreibe, dann wird aus (fast) jedem \n ein \n\n.
Andere Fehlerquellen konnte ich bereits ausschließen, die Anzeige in einem TextCtrl ist auch korrekt, und die MessageBox zeigt das die new lines nicht im String sein sollten.
Also, wo kommen sie her?phlox
-
Klingt für mich wie ein typischer LineFeed/CarriageReturn-Fehler. Windows?
-
Fellhuhn schrieb:
Klingt für mich wie ein typischer LineFeed/CarriageReturn-Fehler. Windows?
Ja, ist Windows (MinGW). Alle newlines sind \n und hab auch schon im Hexeditor nachgesehen, ob die nicht nach \r\n umgewandelt werden, tun sie nicht, es sind \n\n.
So ganz kann ich es mir auch nicht erklären, habe ähnliche sachen ja schon häufiger gemacht.
-
Schon mal probiert
std::ios::binarymitanzugeben? Dies sollte verhindern, dass automatisch Zeichen hinzugefügt/uminterpretiert werden.
Aber nachvollziehen kann ich den Fehler nicht wirklich, da ich ihn nicht reproduzieren kann. Kannst du uns einen kurzen Code geben, wo man dies reproduzieren kann?Grüssli
-
Dravere schrieb:
Schon mal probiert
std::ios::binarymitanzugeben? Dies sollte verhindern, dass automatisch Zeichen hinzugefügt/uminterpretiert werden.
Aber nachvollziehen kann ich den Fehler nicht wirklich, da ich ihn nicht reproduzieren kann. Kannst du uns einen kurzen Code geben, wo man dies reproduzieren kann?Grüssli
Binary tuts tatsächlich beheben

Allerdings hatte ich das für unnötig gehalten, da es ja eh schon "nur" text ist. nix binäres.
-
phlox81 schrieb:
Allerdings hatte ich das für unnötig gehalten, da es ja eh schon "nur" text ist. nix binäres.

Naja, was ist Text? Text ist auch etwas binäres.
std::ios::binarysagt grundsätzlich einfach nur "Schreib es rein, wie du es bekommst!" oder umgekehrt "Lies es, wie es dort steht!". Ohnestd::ios::binarydarf die Implementierung selber Veränderungen und Anspassungen vornehmen. So kann zum Beispiel auch auf dasEOFZeichen in einem File reagiert werden, also dass dasstd::ios::eofbitFlag gesetzt wird, obwohl eigentlich noch Daten im File drin wären.Grüssli