File schließen



  • Hey Leute ich habe gerade eine funktiin geschrieben:

    void addName(std::string name)
    {
        std::ofstream file("ops.txt", std::ios::app);
        file << name;
    }
    

    Und habe mich gefragt ob ich diese Datei schließen muss oder nicht.
    Könnte mir das bitte jemand erklären warum und wieso?

    MFG Opix



  • Die Variable file vom Typ std::ofstream ist lokal zu der Funktion addName. In dem Moment, wo addName verlassen wird, wird sie zerstört, ihr Destruktor wird aufgerufen, und der schließt das File.
    Du musst also nichts weiter tun.



  • Sehr gut erklärt vielen Dank


  • Mod

    Das Schließen von Dateien macht, dass die Datei wieder anderswo geöffnet werden kann und das eventuell noch nicht geschriebene Buffer synchronisiert werden. Dies und das Öffnen von Dateien sind beides sehr aufwändige Aktionen, man sollte eine bestimmte Datei daher möglichst nur einmal öffnen und schließen im Programmverlauf, sofern möglich.

    Die Datei wird hier automatisch geschlossen, da ja der fstream am Ende der Funktion zerstört wird und dabei automatisch die Datei geschlossen wird (wäre schlecht wenn nicht, dann hätte man eine blockierte Datei!). Insofern kann man einerseits sagen, dass du die Datei hier nicht schließen brauchst (und auch nicht solltest), aber andererseits, dass es keine gute Idee ist, für jede einzelne Zeile die Datei erneut zu öffnen.

    Eine bessere Idee ist, die Datei permanent offen zu halten und deiner Funktion auch eine Referenz auf den Stream zu übergeben, in den sie dann schreiben soll. Wobei sich damit wohl vermutlich sowieso der Sinn der Funktion erledigt hast, denn ob du nun

    file << name;
    

    oder

    addname(file, name);
    

    schreibst, macht schließlich keinen großen Unterschied, letzteres ist sogar eher etwas umständlicher.


Anmelden zum Antworten