Selbe Datei lesen und schreiben mit fstream



  • Hallo,
    ich möchte Daten aus einer Datei auslesen, ändern und dann wieder in die selbe Datei schreiben.

    Ich dachte mir es müsste auch gehen ohne diese eine Datei zu öffnen, zu schließen, dann nochmals zu öffnen und nochmal zu schließen... aber irgendwie funktioniert das nicht.

    #include <iostream> 
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	std::fstream fs;
    	fs.open("Test.txt",std::fstream::in | std::fstream::out);//In der Datei steht bereits etwas drin.
    
    	char* str = new char[1024];
    	fs.getline(str,1024);
    	std::cout << str << std::endl;//Zum Test wird das was in der Datei bisher steh, in der Konsole ausgegeben. Das funktioniert ohne Probleme.
    
    	fs.seekp(0);
    
    	fs << "Hallo Welt\n";
    	fs.flush();//Möglicherweise nicht nötig.
    	fs.close();
    
    	return 0; 
    }
    

    In der Datei steht nach der Ausführung des Programms jedenfalls nicht "Hallo Welt" am Anfang... Wo ist der Fehler?

    MfG



  • SchlechterInformatiker schrieb:

    [cpp]
    #include <iostream>

    Was ist denn das?
    🙂



  • Mit dem out parameter wird die Datei beim Öffnen geleert. Wenn du sie vorher auslesen willst musst du sie zunächst nur zum lesen öffnen, und danach erst zum schreiben.



  • Dann geht das also gar nicht ohne zweimal "open" und zweimal "close"?

    Dass die Datei geleert wird, damit hab ich nun wirklich nicht gerechnet.
    Wo kann man denn so fiese Details nachlesen?? Oft haben meine Problemchen genau solche tiefe Ursachen.

    Bisher hab ich mich an http://www.cplusplus.com/reference/iostream/fstream/open/ gehalten. Da steht ja nur

    out (output) Allow output operations on the stream.

    Aber danke erst mal, player424!

    @mngbd: Ich verstehe diene Frage nicht...


  • Mod

    Du musst die Datei im Binärmodus öffnen, wenn du gleichzeitig Lesen und Schreiben willst. Dann ist das kein Problem:

    #include<fstream>
    #include<iostream>
    
    using namespace std;
    
    int main()
    {
      fstream file;
      file.open("foo",ios::in | ios::out | ios::binary);
      cout << file.rdbuf();
      file.seekp(0);
      file.put('G');
    }
    

    Im Binärmodus ist aber natürlich so einiges anders als im Textmodus.

    P.S.: Du machst kein C sondern C++, darauf zielt die Frage von mngbd ab. iostream kennt man nämlich in C nicht und du hast hier im C Forum gefragt.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Oh ok, dass das eigentlich C++ ist, daran hab ich nicht gedacht. Sorry!

    Ich versuch es mal mit dem Binär-Modus.

    Vielen Dank!


Anmelden zum Antworten