Stream anzeigen UND speichern im Sinne eines Logs



  • Hallo! Tschuldigung für meine Anfängerfrage...
    Wie kann ich in einer C++ Konsolenanwendung einen Stream (cout) auf dem Bildschirm ausgeben und gleichzeitig in eine Log-Datei schreiben lassen? Alle Beispiele die ich gefunden habe können immer nur eins von beiden.

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main () {
      streambuf *psbuf;
      ofstream filestr;
      filestr.open ("test.txt");
    
      psbuf = filestr.rdbuf();
      cout.rdbuf(psbuf);
    
      cout << "This is written to the file";
    
      filestr.close();
    
      return 0;
    }
    

    Dieser Code macht eigentlich alles was ich will außer dass cout nicht mehr angezeigt wird sondern nur in die Datei schreibt. Dabei ist es mit egal ob in die Log-Datei in Echtzeit oder erst am Schluss des Programms geschrieben wird.

    Danke schon mal im Voraus!

    nap



  • Hallo

    mach doch eine Funktion, an die du Strings übergibst und die diese sowohl in einen FileStream (als Referenz mitübergeben) alsa auch an cout übergibt.

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke für die Antwort!

    Ich habs mal probiert so zu lösen:

    #include <iostream.h>
    #include <fstream.h>
    #include <string>
    
    using namespace std;
    
    void out(string output);
    ofstream outfile;
    
    int main ( int argc, char * * argv )
    {
      outfile.open ("test.txt");
      out("test\n");
      outfile.close();
    
      return 0;
    }
    
    void out(string output)
    {
      outfile << output;
      cout << output;
    }
    

    Das Problem ist aber dass es bei der Ausgabe vor allen Dingen um Zahlenwerte geht (long, float, int). Wie kann ich die an out übergeben? out("test " + 2 + " bla"); geht nicht. itoa geht in dem zusammenhang auch schlecht. gibts da keine elegante Lösung? cout gibt aus UND schreibt in Datei oder sowas?



  • Hallo

    ich dachte da an so was

    template<typename valuetype>
    void out(valuetype value, ofstream &logfile)
    {
      logfile << value;
      cout << value;
    }
    
    ...
      ofstream outfile;
      outfile.open ("test.txt");
      out("test\n", outfile);
      out(10, outfile);
      outfile.close();
    ...
    

    Hier ist es abzuschätzen, ob man den Logfile-Stream global macht oder als Parameter übergibt.

    bis bald
    akari



  • klappt wunderbar! vielen dank!
    jetz hab ich auch mal templates kennengelernt... 🕶


Anmelden zum Antworten