TXT Datei durchsuchen und Leseposition setzen



  • Hallo Sepp,
    ich hab das gerade noch mal so ausprobiert mit dem ersetzen, wie du das gezeigt hast, aber irgendwie löscht der mir dabei immer die ganze Zeile.
    Hier mal mein Code:

    template <class X> void dateischreiber (X datensatz, int zeigerPosition) {
        ofstream songstream ("Song.txt");
        songstream.seekp (zeigerPosition, ios::beg);
            if (songstream.good()) {
            songstream << datensatz;
            } else {
                //Fehlermeldung einfügen
            }
            songstream.close();
    }
    

    Lasse ich jetzt einen Char-Array mit 100 Stellen an position 0 schreiben, funktioniert das soweit erstmal. Lasse ich dann aber an Stelle 102 (oder höher) einen anderen Char-Array oder Int oder sonst was schreiben, ist nur noch der neue Text in der Datei und der alte verschwindet komplett.

    Wo ist da mein Denkfehler?

    Gruß


  • Mod

    Wenn du einen ofstream öffnest, dann ist standardmäßig ios::out der Openmode. Dies löscht eine vorher vorhandene Datei. Du musst daher, wie gesagt, ios::out | ios::in als Openmode nehmen.



  • SeppJ schrieb:

    Dies löscht eine vorher vorhandene Datei.

    Was? Du meinst std::ios::trunc. Seit wann löscht std::ios::out?


  • Mod

    Hacker schrieb:

    Was? Du meinst std::ios::trunc. Seit wann löscht std::ios::out?

    Seit 1979. Oder da dieses Verhalten auf den Openmodes von C basiert eigentlich seit 1972. Und da diese wiederum auf B basieren...



  • SeppJ schrieb:

    Wenn du einen ofstream öffnest, dann ist standardmäßig ios::out der Openmode. Dies löscht eine vorher vorhandene Datei. Du musst daher, wie gesagt, ios::out | ios::in als Openmode nehmen.

    Vielen herzlichen Dank !
    Daran hat's gelegen. Mein Buch hat diese vorgehensweise dummerweise mit folgenden Worten beschrieben:

    Wenn Sie beides tun wollen [Anm. gemeint ist schreiben und lesen], benutzen Sie fstream und setzen den mode auf in|out - und viel Glück dabei, es ist häufig einfacher eine Datei erst komplett zu schreiben [...] ,als alles gleichzeitig zu tun.

    Naja. Nun weiß ich's ja. Vielen Dank nochmal 😉

    Gruß Jörg


  • Mod

    JörgK schrieb:

    Daran hat's gelegen. Mein Buch hat diese vorgehensweise dummerweise mit folgenden Worten beschrieben:

    Wenn Sie beides tun wollen [Anm. gemeint ist schreiben und lesen], benutzen Sie fstream und setzen den mode auf in|out - und viel Glück dabei, es ist häufig einfacher eine Datei erst komplett zu schreiben [...] ,als alles gleichzeitig zu tun.

    Hmm, dieser lockere Stil...Das Buch ist aber nicht von Jürgen Wolf, oder?



  • SeppJ schrieb:

    Hmm, dieser lockere Stil...Das Buch ist aber nicht von Jürgen Wolf, oder?

    Dieser Stil könnte vom Großadministrator höchstpersönlich sein, denn eine kurze Google-Recherche nach dem Zitat brachte C++ für Dummies zum Vorschein.


  • Mod

    😕 Hat der Großadministrator die deutsche Ausgabe geschrieben? War mir bisher gar nicht bekannt.





  • Na schau, da GRÖADAZ 😃


Anmelden zum Antworten