This Frage stellt die Differenz zwischen app
und ate
und sowohl den Antworten und cppreference bedeutet, dass der einzige Unterschied besteht darin, dass app
bedeutet, dass der Schreib Cursor am Ende der Datei vor jedem Schreibvorgang gesetzt wird , wobei ate
bedeutet, dass der Schreibcursor nur beim Öffnen am Ende der Datei platziert wird.ofstream offen Modi: ate vs App
Was ich sehe tatsächlich (in VS 2012) ist, dass ate
Angabe verwirft den Inhalt einer bestehenden Datei, während app
nicht (es neue Inhalte auf den zuvor vorhandenen Inhalt anhängt). Mit anderen Worten, ate
scheint trunc
zu implizieren.
Die folgende Anweisung anfügt „Hallo“ an eine vorhandene Datei:
ofstream("trace.log", ios_base::out|ios_base::app) << "Hello\n";
Aber die folgende Anweisung ersetzt den Inhalt der Datei mit nur „Hallo“:
ofstream("trace.log", ios_base::out|ios_base::ate) << "Hello\n";
Die MSDN-Dokumentation VS 6.0 bedeutet, dass dies nicht passieren sollte (aber dieser Satz scheint in späteren Versionen von Visual Studio zurückgezogen worden zu sein):
ios :: trunc: Wenn die Datei bereits existiert, wird ihr Inhalt verworfen. Dieser Modus ist impliziert, wenn ios :: out angegeben ist und ios :: ate, ios :: app, und ios: in nicht angegeben sind.
Ja. Aber wie Sie sehen können, ist das Kombinieren von Leseflags 'std :: ios :: in' mit Schreibflags für einen Schreibstrom eine so dumme Logik in fstream. – Raindrop7