ausgabe in datei



  • Hallo!
    Ich habe ein Programm mit mehreren Funktionsaufrufen. In diesen Funktionen findet eine Ausgabe am Bildschirm statt.
    Nun möchte ich aber keine Ausgabe am Bildschirm, sondern in einer Datei. Ich möchte dazu aber nicht jedes Mal in einer Funktion "fopen" aufrufen bzw. will ich auch nicht unbedingt mit globalen Variablen arbeiten.
    Jemand Lösungsvorschläge für mich??



  • Singleton



  • Hab versucht mich über google und msdn über Singleton zu informieren. Aber daraus werd ich nicht schlau, wie mir das weiter helfen könnte.
    Hat vielleicht jemand Code - Beispiele?
    Oder gibs eine andere Möglichkeit mein Problem zu lösen?



  • Ich verschiebe dich zu dieser Standard-Frage mal ins Standard-Forum von C++.

    MfG SideWinder



  • Hab versucht mich über google und msdn über Singleton zu informieren. Aber daraus werd ich nicht schlau, wie mir das weiter helfen könnte.

    Erstmal garnicht. Der Ruf nach einem Singleton ist definitiv voreilig.

    Wie gibst du denn die Sachen aus? Mit den Standard C++ Strömen? Wenn ja, die haben die schöne Eigenschaft, dass man sie leicht umlenken kann:

    int main()
    {
        cout << "Das sieht man in der Regel auf dem Bildschirm" << endl;
        ofstream out("Datei.txt");
        streambuf* pOld = cout.rdbuf(out.rdbuf());
        cout << "Das kommt in die Datei" << endl;
        cout.rdbuf(pOld);
        cout << "Und das kommt wieder auf den Bildschirm" << endl;
    
    }
    


  • Danke HumeSikkins; aber beim kompilieren bekomm ich folgende Fehlermeldung:
    rdbuf akzeptiert keine 1 Parameter
    Ich habe zwar eine Standard c++ Ausgabe, hab mich aber mittlerweile über Singleton informiert und finde diese Methode gar nicht mal so schlecht!
    Bei der Umlenk - Methode tritt dann ja auch der gleiche Effekt auf, wie ich das bei "fopen" hätte. Oder?



  • rdbuf akzeptiert keine 1 Parameter

    Kann es sein, dass du <iostream.h> statt <iostream> verwendest?

    Bei der Umlenk - Methode tritt dann ja auch der gleiche Effekt auf, wie ich das bei "fopen" hätte. Oder?

    Und das wäre welcher?



  • du hattest recht; hab jetzt die andere include Datei probiert ... bekomm aber den gleichen Fehler.

    Und das wäre welcher?

    Eben der Effekt, dass ich diesele Prozedur in jeder Funktion wiederholen muss?



  • Original erstellt von life_drake:
    Eben der Effekt, dass ich diesele Prozedur in jeder Funktion wiederholen muss?

    nein, einmal umgelenkt, bleibt das so.



  • Ok! Das klingt ja dann nicht mal so schlecht!
    Nur wieso schreit mein Compiler?



  • du hattest recht; hab jetzt die andere include Datei probiert ... bekomm aber den gleichen Fehler.

    Versuch bitte mal folgendes Minimalbeispiel:

    #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {
        cout << "Das sieht man in der Regel auf dem Bildschirm" << endl;
        ofstream out("Datei.txt");
        streambuf* pOld = cout.rdbuf(out.rdbuf());
        cout << "Das kommt in die Datei" << endl;
        cout.rdbuf(pOld);
        cout << "Und das kommt wieder auf den Bildschirm" << endl;
    
    }
    

    Sollte das funktionieren, dann hast du in deinem anderen Projekt irgendwo noch alte Pre-Standard-Header inkludiert (z.B. <fstream.h> statt <fstream> ).

    Sollte das nicht funktionieren, geht die Umleitung mit den alten Streams so:

    #include <iostream.h>
    #include <fstream.h>
    int main()
    {
        cout << "Das sieht man in der Regel auf dem Bildschirm" << endl;
        ofstream out("File.txt");
        cout = out;
        cout << "Das geht in die Datei" << endl;
        filebuf f(1);
        cout = &f;
        cout << "Und das kommt wieder auf den Bildschirm" << endl;
    }
    

    Ein Singleton ist hier in meinen Augen überflüssig. Erstens gibt es bereits einen globalen Stream und zweitens ist es auch keine Problem einen weiteren anzulegen. Du brauchst hier ja keinen der Vorteile des Singleton-DPs (Erweiterung/Veränderung durch Vererbung usw.). Ein Singleton bringt dir hier also nix außer eine höhere Komplexität.

    [ Dieser Beitrag wurde am 27.03.2003 um 21:46 Uhr von HumeSikkins editiert. ]



  • @HumeSikkinsDanke für deine Antwort über Singleton.
    Hab jetzt deine Minibeispiele ausprobiert. Und hab dazu gleich mal ne Frage: Warum funktioniert bei mir nur das Programm mit den alten Streams? (Ich arbeite mit dem VC - Compiler unter Win2000)



  • Hallo,
    was sagt er denn zu dem Minibeispiel mit den neuen Streams?



  • Hello!
    Mit den neuen Streams meldet er noch immer:
    "rdbuf akzeptiert keine 1 Parameter"



  • Ich arbeite mit dem VC - Compiler unter Win2000

    Welche Version?



  • 6



  • Hallo,
    dann machst du irgendwas falsch. Die mit dem MSVC6 mitgelieferte Standardlib kennt die neuen Streams und hat mit dem Minimalbeispiel kein Problem.

    Oder hast du vielleicht die STL ausgetauscht?



  • Hallo!
    Ich kann dir leider nicht sagen, was ich falsch gemacht hab;
    Habs nochmal mit einem neuen Projekt probiert und da funktioniert es jetzt.
    Komischer Weise funktioniert es jetzt auch in meinem alten Projekt!
    Ich hab aber nichts geändert! Tja ...
    Danke auf jeden Fall für deine Idee!


Anmelden zum Antworten