Datei ausgabe (datei.txt)



  • Hallo alle zusammen,

    ich versuche gerade meine Messdaten in einem datei.txt zu schreiben.
    Es klappt fast alles.
    Es tritt einen Problem und zwar bei jede Aufruf der Funktion, die für die ausgabe zuständig ist die alten Messdaten gelöscht und nur die neue Messdaten geschrieben.

    void TxtAusgabe(vector<int> v)
    {
    	vector<int>::iterator iNext = v.begin();
    	vector<int>::iterator iEnd = v.end();
    	string zielDatei = "c:\\Users\\test_ausgabe.txt";
    
    	ofstream datei(zielDatei, ios::out);
    	if(!datei)
    	{
    		cerr << zielDatei << " Kann nicht geoeffnet werden!\n";
    		exit(-1);
    	}
    	copy(v.begin(),v.end(),ostream_iterator<int>(datei,"  "));
    	datei.close();
    
    }
    

    das heisst: wenn ich diese Funktion 10 mal aufrufe wird der Inhalt der datei.txt nur von letzten mal zu lesen.

    danke in voraus



  • ofstream datei(zielDatei, ios::out | ios:app);
    

    app = append = hinten anfügen


  • Mod

    thomas 434 schrieb:

    ofstream datei(zielDatei, ios::out | ios:app);
    

    app = append = hinten anfügen

    Bei einem ofstream ist das übrigens identisch mit

    ofstream datei(zielDatei, ios:app);
    

    Das ios::out ist da implizit. Ebenso ios::in bei ifstream. Das lässt sich auch gar nicht ausschalten. Nur beim fstream muss man angeben, welches man möchte.



  • Ja das habe ich schon ausprobiert.
    das Problem in dem Fall wenn ich das Prog 20 mal starte, wird der Inhalt 20 mal geschrieben.



  • MaximGast schrieb:

    Ja das habe ich schon ausprobiert.
    das Problem in dem Fall wenn ich das Prog 20 mal starte, wird der Inhalt 20 mal geschrieben.

    und was genau willst du? 😕


  • Mod

    MaximGast schrieb:

    Ja das habe ich schon ausprobiert.
    das Problem in dem Fall wenn ich das Prog 20 mal starte, wird der Inhalt 20 mal geschrieben.

    Tja, dann muss man wohl einmal am Anfang alles löschen. Oder sich was anderes ausdenken, zum Beispiel neue Dateien für jede Messung.

    Spricht eigentlich was dagegen, die Datei die ganze Zeit offen zu halten? Sind dermaßen große zeitliche Abstände zwischen den Schreibvorgängen?



  • void TxtAusgabe(vector<int> v) // Wieso kopieren? Bei vector oder Containern i.A. immer per Referenz, oder noch Besser per template-isiertem Start-End-Iteratorenpaar
    { 
        vector<int>::iterator iNext = v.begin();  // Definiere deine Variablen so spät wie möglich, also genau bevor du sie zum ersten Mal gebrauchst (hier sind sie AFAICS überflüssig)
        vector<int>::iterator iEnd = v.end(); 
        string zielDatei = "c:\\Users\\test_ausgabe.txt"; // Was spricht gegen forward-slashes?
    
        ofstream datei(zielDatei, ios::out); // (Siehe SeppJs Post)
        if(!datei) // Prüfe mit is_open
        { 
            cerr << zielDatei << " Kann nicht geoeffnet werden!\n"; // Du brauchst hier eine Exception!
            exit(-1); // Nicht exit benutzen! ( zumindest so nicht! ) Siehe auch Standard, §3.6.1/4
        } 
        copy(v.begin(),v.end(),ostream_iterator<int>(datei,"  ")); 
        datei.close(); // Dieses Statement ist hier überflüssig, da close() automatisch im Destruktor aufgerufen wird. RAII!
    }
    

    Also nur an einer Zeile nichts auszusetzen.



  • @Sone für deine Kommentar danke

    Soll ich für jeden Aufruf eine extra Methode aufschreiben?
    @Spricht eigentlich was dagegen, die Datei die ganze Zeit offen zu halten? Sind dermaßen große zeitliche Abstände zwischen den Schreibvorgängen?

    Ja

    die Messungen sind sehr unterschiedlich und ja nach Anwendungen ?


Log in to reply