[Solved] (o)fstream löscht immer die Datei



  • Davon bin ich überzeugt, aber ich muss bis morgen eine Lauffähige Version haben, oder mein Teammitglied erschlägt mich 🙂
    (Schulprojekt)

    Ein filestream wird unserem Lehrer allerdings sicherlich besser Gefallen...



  • Mein Gott.. wenn du einfach mal posten würdest, wie du das mit fwrite machst, dann sagen wir dir wie du das mit ofstream machen kannst. War das denn so schwer zu verstehen?



  • fseek(file,512);
    fwrite(daten,größe,1,file);

    Einfach Daten in der Datei an einer bestimmten Stelle überschreiben.





  • Ich liebe es, wenn Informationen mit fortlaufenden posts verloren gehen 🙂
    Naja, passiert mir auch manchmal.

    Ich benutze ja schon lange seekp, aber der Teil vor der Stelle an die ich schreibe wird mit 0-Bytes aufgefüllt und der Teil dahinter abgeschnitten.

    Und das möchte ich verhindern.

    Oder ist das eine Eigenart meiner Maschiene?



  • Aha! Schreib das doch im Eingangspost. 😉
    Nimm fstream.


  • Mod

    Xandaros schrieb:

    Oder ist das eine Eigenart meiner Maschiene?

    Wenn du es richtig machst, dann passiert das nicht. Wenn doch, ist was kaputt. Was ich aber nicht glaube.

    fstream foo("test.dat", ios::in | ios::out);
    
      foo.seekp(3, ios::beg);
      foo << "Hallo";
    
    $> echo "ABCDEFGHIJKL" > test.dat; ./a.out; cat test.dat
    ABCHalloIJKL
    


  • SeppJ schrieb:

    Xandaros schrieb:

    Oder ist das eine Eigenart meiner Maschiene?

    Wenn du es richtig machst, dann passiert das nicht. Wenn doch, ist was kaputt. Was ich aber nicht glaube.

    Er hat bisher wohl ofstream genutzt. (Und der Standardkonstruktor scheint sich genau wie beschrieben zu verhalten.)



  • Hmm, auf die Idee die Datei lesend zu öffnen, bin ich gar nicht gekommen...
    (Schließlich möchte ich ja eigentlich nur schreiben)

    Danke!


  • Mod

    Xandaros schrieb:

    Hmm, auf die Idee die Datei lesend zu öffnen, bin ich gar nicht gekommen...
    (Schließlich möchte ich ja eigentlich nur schreiben)

    Nun, das ist im Prinzip nur eine clevere Benutzung der zur Verfügung stehenden Flags. Das kann manchmal etwas verwirrend sein. Falls du mit den Flags bei den C-Dateien sicherer umgehen kannst (anscheinend ist das ja so, da du mit fwrite keine Probleme hattest), ist in Tabelle 95 im Standard (C++98) eine Übersetzung zu finden. Der Modus "r+" den du hier möchtest (anders würde das in C auch nicht gehen) entspricht gerade in und out.


Anmelden zum Antworten