Globaler Schreib-Zugriff auf eine Datei



  • Hallo Experten,
    meine Anwendung umfasst diverse Klassen, deren Objekte in einer bestimmten Reihenfolge durchlaufen werden. Um die Ablaufreihenfolge zu kontrollieren möchte diverse std::cout Ausgaben in eine Datei umleiten, da die std::out Ausgaben nicht dem realen Ablauf entsprechen (trotz std::flush).
    Frage wie kann ich den output filestrem ofstream global definieren damit ich von jedem Objekt darauf Zugriff habe?
    Ich möchte natürlich keinen Übergabe Pointer für den ofstream für jede Klasse haben, da der ofstream-Pointer nix mit der Funktionalität zu tun hat.

    Daher meine Anfängerfrage: Welche pragmatische (unsaubere) Lösung gibt ees um den ofstream global zu definieren, damit alle Objekte darauf zugreifen können?

    Danke für eure Antworten!

    Zusatz:
    Mit einer h-datei die jede Klasse inkludiert funktioniert es nicht.

    #ifndef LOGFILE_H
    #define LOGFILE_H
    
    #include <fstream>
    #include <iostream>
    
    std::ofstream logFile;
    
    #endif // LOGFILE_H
    

  • Mod

    So wie cout (und andere globale Variablen) auch:

    extern std::ofstream logFile;  // im Header
    
    std::ofstream logFile(/*was auch immer*/);   // In EINER Implementierungsdatei
    

    Ich möchte übrigens noch anmerken, dass es durchaus möglich ist, cout (oder clog, was vielleicht eleganter wäre) zu einem anderen Stream umzubiegen.

    Außerdem bietet so ziemlich jede Ausführungsumgebung auch die Möglichkeit, pauschal alles, was nach stdout geschrieben wird, in eine Datei umzulenken (oder auch getrennt nach stdout und stderr). Dazu brauchst du an deinem Programm gar nichts ändern.



  • schnebe schrieb:

    da die std::out Ausgaben nicht dem realen Ablauf entsprechen (trotz std::flush).

    Bist du sicher? Hast du Threads? Oder weshalb sollten die Ausgaben sonst anders rauskommen, als du erwartest?



  • @wob : Threads sind mit bisher noch unbekannt...
    @seppJ : ok - tut.
    Das mit der cout-Weiterleitung durch die Entwicklungsumgebung hört sich intereesant an. Ich verwende Qt-Creater. Ich mach mich mal schlau - oder hast du zufälliger Weise Ahnung wie dies bei Qt geht?

    Danke!



  • schnebe schrieb:

    @wob : Threads sind mit bisher noch unbekannt...

    Dann kommen die Ausgaben auch in der korrekten Reihenfolge raus. Egal ob du nun mit cout << auf den Bildschirm oder in eine Datei ausgibst und egal, ob du flush machst oder nicht. Ich vermute, dass dein Programm was anderes tut als du denkst 😉


Log in to reply