Text in eine Textdatei einfügen



  • Hi!

    Ich möchte gerne eine Methode schreiben, die Text in eine Textdatei schreibt.
    Mein Problem:
    Die Textdatei ist nicht leer. Bereits enthaltener Text soll so bleiben wie er ist, ich möchte nur an einer bestimmten Position Text einfügen (überschreiben).

    Ein Beispiel:

    Inhalt der Datei datei.txt:

    Beispiel1234

    Aufruf meiner Funktion:

    fstream filestream("datei.txt",ios::in|ios::out);
    myWrite(&filestream,8,"TEST");

    neuer Inhalt der Datei:
    BeispielTEST

    Am Funktionsaufruf sieht man schon eine Einschränkung, die bestehen bleiben soll:
    Es wird ein bereits geöffneter Filestream übergeben (wie in meinem Code-Beispiel).
    Ich weiß, dass es ganz einfach zu lösen wäre, wenn ich erst einmal die Datei einlese, schließe, wieder öffne und schreibe.
    Das geht aber leider nicht, da eben ein bereits geöffneter Filestream übergeben wird und in der Funktion write der Dateiname nicht bekannt ist.
    Ein Ableiten von fstream mit einem neuen Datenelement für den Dateinamen ist auch keine Lösung.
    Es soll wirklich nur dieser eine Funktionsaufruf mit diesem einen Parameter sein.

    Hat vielleicht jemand eine Idee für mich? 👍

    viele Grüße,
    pun


  • Mod

    edit: Hier stand Unsinn.

    edit2: So jetzt aber:

    #include<fstream>
    #include<string>
    
    using namespace std;
    
    int main()
    {
      fstream file("datei.txt", ios::in | ios::out);  
    
      // Beispiel für Lesen
      string inhalt;
      file >> inhalt;
    
      // Beispiel für Schreiben
      size_t pos = inhalt.find("1234");
      file.seekg(pos, ios::beg);   // Wir müssen noch sagen, wohin
      file<<"Test";
    }
    


  • Hi SeppJ,

    danke für deine Antwort.
    Dein Snippet ändert meine Datei leider nicht.
    Ich nehme an das liegt daran, dass sobald die Datei lesend geöffnet wird, ein Schreibzugriff einfach ignoriert wird.

    Oder funktioniert das bei dir?

    /edit

    Ok, vergiss das 😉
    Ich muss ja jetzt gar nicht mehr vorher einlesen.
    Problem gelöst, vielen dank!


  • Mod

    pun schrieb:

    Oder funktioniert das bei dir?

    Ja, das war ja gerade der Sinn dieses Codeschnipsels. Sicher ,dass du auch die richtige Datei anguckst? Lass dir mal den Inhalt in deinem Programm anzeigen und ändere auch einmal die Datei, damit du siehst, dass du auch wirklich die richtige Datei anguckst. Hast dein Programm eventuell nur Leserechte? Ich kenne mich mit Windows nicht so aus, aber es könnte sein, dass andere Programme nicht schreiben dürfen, wenn du die Datei nebenher noch in einem anderen Programm (Editor) geöffnet haben solltest.



  • Hallo pun,

    pun schrieb:

    Es wird ein bereits geöffneter Filestream übergeben

    Weißt du denn, daß dieser auch zum Schreiben geöffnet wurde?

    Und zum Setzen des Schreibzeigers, mußt du die seekp-Funktion verwenden (da hat SeppJ sich wohl vertan 😉



  • Jepp, es klappt jetzt alles wunderbar.
    Ich war bisher immer im Glauben, man müsse eine Datei vorher immer komplett einlesen, um so etwas zu erreichen. Wieder was gelernt 🙂

    Danke euch beiden 👍



  • Komplett einlesen müsstest du, wenn du wirklich etwas einfügen möchtest ohne es zu überschreiben.


Anmelden zum Antworten