fstream- Lesen und schreiben mit einem Objekt?



  • Hallo,
    Vorweg: ich bin relativ neu (mit c++, kann Pure Basic), und kenne mich noch nicht so gut aus.

    Ich habe vor eine Art Netz aus Verweisen in einer Datei (groß > 5GB) zu erzeugen und zu verändern.

    Ich muss also in der Datei Lesen, und wenn ich was gefunden habe auch Schreiben
    Einzeln geht das gut (fstream und << >> bzw put etc).

    Nun würde ich das gerne mit einem einzigem Objekt lösen.

    Ich habe gelesen das fstream (Parameter in+out) beides kann, aber wenn ich das probiere, wird die Datei nur bei einer bestimmten reienfolge verändert, sonst nicht (so als ob man nicht speichert), bzw wenn ich zuerst schreibe ist sogar die Leseausgabe "kaputt".

    soweit bin ich gekommen:
    Code:

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    int main () {
      string line;
      string newline;
      fstream myfile ("example.txt",ios::in | ios::out);
      if (myfile.good())
      {
    
    		cin>>newline; //schreiben, überschreibt die ersten paar zeichen, OK
    		myfile<<newline;
    		myfile.flush();	//nötig?
    
    		myfile>>line;//Lesen, liest nach der Änderung(warum?) alles bis zum Ende aus
    		cout<<line;
    
    		cin>>newline; //schreibt nichts mehr.
    		myfile<<newline;
    		myfile.flush();	
    
        myfile.close();
      }
    
      else cout << "Unable to open file"; 
      return 0;
    }
    

    Vielen Dank fürs Lesen und für Hilfe (hoffentlich)!



  • ganz einfach, weil das was vorhin in die datei eingelesen wurde noch nicht gespeichert wurde. kurz gesagt es geht nicht das fiel zu beschreiben und sofort auszulesen. du müsstest als erstes mit variablen arbeiten, diese dann manipuliern(löschen, ersetzen, einfügen) und anschliessend myfile << textvariable << invariable usw. und zu aller letzt myfile.close natürlich 🙂



  • aber ist es nicht möglich die Datei einfach zwischendurch zu speichern?
    Ich dachte z.b. das flush() das macht.
    😕

    Also müsste ich das File öffnen, lesen, schließen, öffnen, schreiben, schließen usw?



  • rumcajs007 schrieb:

    ...kurz gesagt es geht nicht das fiel zu beschreiben und sofort auszulesen...

    😕 *semantic underflow error*

    P.S.: Kommata und Groß/Kleinschreibung können sehr helfen und kosten recht wenig.

    Gruß,

    Simon2.



  • Vallan schrieb:

    aber ist es nicht möglich die Datei einfach zwischendurch zu speichern?
    Ich dachte z.b. das flush() das macht.
    😕

    Also müsste ich das File öffnen, lesen, schließen, öffnen, schreiben, schließen usw?

    Das ist der uebliche Weg. Wenn die Datei so gross ist, dass du sie nicht/nur ungut im RAM zwischenspeichern kannst, muesstest du schauen ob du eventuell mit Windows-spezifischen (ich geh davon aus du verwendest Windows) Dingen nur Teile einer Datei veraendern kannst. Meines Wissens geht das mit normalen fstreams nicht - da kannst du nur entweder die Datei komplett ueberschreiben oder am Ende anfuegen. Infos zu den Windows-Spezifischen Dingen ("WinAPI") gibts in der MSDN (einfach mal googeln).


Anmelden zum Antworten