ofstream gibt nichts aus, warum nur?



  • Jetzt steh ich echt auf dem Schlauch:

    Wenn ich das Ganze in ein neues Projekt / einen neuen Arbeitsbereich einbinde, wird auch nichts ausgegeben.

    Jetzt kann es ja nur noch an dem Projekt selbst liegen. Es besteht aus etwa 20 cpp und ebensovielen Headerfiles. Drei Test-Dateien enthalten je eine main-Funktion, zwei werden immer vom Erstellen ausgeschlossen.

    Der Code, den ich oben gepostet habe, steht in einer dieser Dateien, und nichts anderes wird ausgeführt!!!!

    Jetzt kann es ja "nur" noch an irgendwelchen Linker-Dummheiten liegen.

    Ich hab auch schon in allen cpp-Files gesucht, ob ich nicht irgendwo noch einen zweiten ofstream fout habe, aber in allen files habe ich ihn extern:

    #include <fstream>
    
    using namespace std;
    extern ofstream fout;
    

    Jetzt frag ich mich wirklich, was das sein soll...



  • Hi,

    probiers mal mit fout.flush(), bevor du die Datei schließt. Das leert die Puffer und schreibt alles sich noch in den Puffern befindliche in die Datei.
    Eigentlich hatte ich aber auch gedacht, dass das bei close() automatisch gemacht wird...

    Mfg, smasher1985



  • smasher1985 schrieb:

    Hi,

    probiers mal mit fout.flush(), bevor du die Datei schließt. Das leert die Puffer und schreibt alles sich noch in den Puffern befindliche in die Datei.
    Eigentlich hatte ich aber auch gedacht, dass das bei close() automatisch gemacht wird...

    Mfg, smasher1985

    Hab es probiert: Keine Veränderungen, nichts wird ausgegeben.

    Kann es vielleicht irgendwie sein, dass das Ganze in irgendeinen anderen ofstream verebbt? Kann mir das zwar selber auch nicht denken, aber vielleicht hatte mal jemand dasselbe Problem?



  • Das Öffnen der Datei schlägt wahrscheinlich schon fehl. Das passiert im Zweifel dann, wenn die Datei schreibgeschützt ist oder wenn gerade ein anderes Programm darauf zugreift.



  • Nehmen wir an, das wäre so:

    (a) wie kann ich das nochmal mit ofstream rausfinden?
    (b) Und warum stürzt das Programm beim Zugreifen nicht ab?



  • Hi,

    habe etwas nachgebohrt, mit

    fout.rdstate()
    

    kann man sich anscheinend Status-Infos holen. Diese Funktion gibt gleich nach dem Öffnen in diesem Programm "badbit" zurück, was alle anderen Programme, in denen ich ofstream verwende, nicht der Fall ist.

    badbit:

    to record a loss of integrity of the stream buffer
    

    Ist das soweit korrekt, also: Stellt man so einen Fehler im Stream fest? Oder ist es nur Zufall bzw. was ganz anderes, rdstate() zu verwenden?

    Und wenn dies aussagekräftig wäre, wie kann es dazu kommen?

    Ich meine: Eigentlich will ich ja nur das Projekt weiterentwickeln. Aber egal, ob ich alle Dateien kopiere und in ein anderes Projekt an einer ganz anderen Festplattenposition kopiere, es bringt alles nichts, anscheinend will irgendjemand, dass es nicht geht.



  • Vielleicht wäre es mal günstig Exceptions abzufangen.
    Dazu muss man wahrscheinlich den ofstream so instellen: fout.exceptions(ios_base::badbit | ios_base::failbit);

    Dann kannst du sie mit try und catch abfangen.

    Gruß Christian



  • Probier mal

    ofstream fout("Protokoll.txt");
    
    if (fout) {
      fout << "irgendwas";
    
      fout.close();
    }
    

    In den else-zweig kannst du ja dann eine Fehlerausgabe oder so einbauen...

    Mfg, smasher1985



  • Ja, smasher1985, du hast schon recht. fout ist tatsächlich NULL. Und so kann ich den Fehler behandeln.

    ----- ABER ------

    Warum klappt es nicht??? Speicher voll? Festplatte kaputt? Was kann ich tun?

    Auch nach Neustart und auf meinem Laptop besteht das Problem weiterhin. Und wie gesagt, wenn ich in dieselbe Datei mit einer der anderen Main-Funktionen etwas schreibe, dann klappt alles.

    Name ändern, Endung weglassen, Verzeichnis wechseln, alles hat keinen Effekt. Das ist schon extrem seltsam



  • Kling irgendwie als wenn dein dein Program keine schreib Rechte besitzt : Betriebsystem?



  • Windows 2000.


Anmelden zum Antworten