Datei schreiben



  • Hey ihr,

    Folgendes Programm soll erst aus einer Datei lesen.
    Das gelesene ausgeben und dann neues in die Datei schreiben.
    Das Lesen funktioniert.
    Das Schreiben funktioniert leider nicht und der Fehler wird ausgegeben.
    Das Komischste ist eigentlich, dass es ab und zu sogar funktioniert... hab das Gefühl, dass es fast nen Wackelkontakt ist.
    Kann sich jemand vorstellen woran das liegt?

    #include <iostream> 
    #include <string>
    #include <fstream>
    #include <limits>
    using namespace std;
    int main(void)
    {   
       string dateiname = "Test.txt";
       fstream datei(dateiname.c_str(),ios::in);
       cout << datei.get() << endl;
       datei.clear();
       datei.ignore(numeric_limits<streamsize>::max(),'\n');
       datei.close();   
       datei.open(dateiname.c_str(),ios::out);
       datei << "DAS HIER SOLLTE IN DIE DATEI GESCHRIEBEN WERDEN!" << endl;
       if(!datei)
          cerr << "FEHLER! Konnte nicht geschrieben werden" << endl;
       system("pause");   
    }
    

    cya
    David

    PS: 🙂 😃 🙂 😉 😃 😉



  • Wofür hast du denn das datei.clear() und datei.ignore(...)? Funktioniert's vielleicht, wenn du das weglässt? Bzw was willst du damit bezwecken, ich kenn's jedenfalls nur vom Konsolen-Eingabestream..



  • In meinem Buch steht, dass die Statusbits in allen Streams vorkommen.
    Ich lies clear etc erst weg... dachte dann, dass es vielleicht gut ist vor erneutem Öffnen alle Bits wieder auf einen gültigen Status zu setzten und den Buffer zu leeren...-.-
    Ohne gehts nicht.



  • Des weiteren würde ich die Abfrage, ob der Stream geöffnet ist vor den Schreibvorgang setzen. Danach kannst Du explizit Fehler abrufen. Also:

    datei.open(dateiname.c_str(),ios::out);
       if(!datei)
          cerr << "FEHLER! Konnte nicht geoeffnet werden." << endl;
       datei << "DAS HIER SOLLTE IN DIE DATEI GESCHRIEBEN WERDEN!" << endl;
       if(datei.fail())
          cerr << "FEHLER! Konnte nicht geschrieben werden." << endl;
    


  • Füg ich die Zeile hinzu sagt er mir, dass die Datei erst garnicht geöffnet werden kann... echt komisch.
    Weil wenn schon das nicht klappt kann ja auch nicht geschrieben werden xD

    Allerdings funktioniert das öffnen, wenn ich mit ignore und clear alles lösche.



  • das ignore() ist auf jeden Fall überflüssig (das brauchst du nur, wenn du anschließend noch weiter lesen willst). Ansonsten: Hast du mal versucht, zum Öffnen einen neuen fstream zu verwenden anstatt den alten zu recyclen?



  • Mit neuem klappt es sofort.
    Aber ich würde zuerst gerne verstehen, warum es nicht einfach mit nem alten funktioniert... müsste doch theoretisch gehn.



  • Welchen Compiler und welche C++-Standard-Bibliothek verwendest du?

    Evtl. hilft ein:

    datei.close();
    datei.clear();
    datei.open(...);
    

    Ansonsten debug doch mal den Aufruf von fstream::open...



  • Ich benutzte <iostream> : Compiler: Dev C++


Log in to reply