C++ - Dateioperationen: Daten am Ende einfügen



  • Hallo,

    ich habe ein kleines Problem mit den Dateioperationen.
    Ich habe eine Datei, dort soll am Ende etwas hinzugefügt werden.

    In der Datei steht zum Beispiel:

    asd
    dfs
    df
    

    wenn ich dann das programm öffne, soll das programm noch etwas DANACH einfügen.
    zb blubb, dass in der datei dann steht:

    asd
    dfs
    df
    blubb
    

    dafür habe ich folgenden Code benutzt:

    #include <fstream>
    
    fstream datei;
    datei.open("Text.txt", ios_base::ate | ios_base::out);
    datei << "blubb" << endl;
    datei.close();
    

    trotz ate wird der Inhalt jedesmal überschrieben.

    was mache ich falsch?



  • Ich habe es jetzt so gelöst, es geht:

    std::fstream datei;
    datei.open("Text.txt", std::ios_base::out | std::ios_base::app);
    datei.seekg(0, std::ios_base::end);
    


  • Das ios_base::ate ("at the end") hat erstmal keine Auswirkung darauf, wie das File geöffnet wird. Wenn das File dann allerdings offen ist, wird an's Ende positioniert.
    Bleibt also vom openmode noch das bit ios_base::out übrig, und siehe da: ios_base::out hat den gleichen Effekt wie "w" beim fopen() aus C: "truncate to zero length".

    Was also passiert: das File wid beim oeffnen auf 0 bytes abgelängt und danach an's Ende positioniert.

    Nimm ios_base::out | ios_base::app und benutz den Entsprechenden C'tor anstatt des members open().


Log in to reply