Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ C / C++ (ANSI-Standard) » Ausgabe umleiten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.05.2003, 17:52 Uhr
virtual
Sexiest Bit alive
(Operator)


Das Problem
Manchmal will man Programmseitig die Ausgabe umleiten, zB hat man ein Programm geschrieben, das eine Option hat, die bewirken soll, daß alles, was man normalerweise auf den Bildschirm sieht, in einer Datei landet. Man spricht auch von "Output redirection" in diesem Zusammenhang. Die große Frage ist: Wie geht das?


C++:
#include <iostream>
#include <fstream>

int main()
{
    std::ofstream datei("umleitung.txt");

    /*  Optionaler Schritt:
        Die Formatierungsflags von std::cout werden von std::cout
        für die Datei übernommen. */

    datei.copyfmt(std::cout);

    /*  Dies ist die entscheidende Zeile:
        Sie weist std::cout den StreamBuffer der Datei zu.
        Damit werden im folgenden Alle Ausgaben von std::cout
        in die Datei umgeleitet. Aber vorsicht: Wenn datei
        destruiert wird, ist auch der StreamBuffer ungültig
        und std::cout rennt in den Wald. Daher wird am Ende
        Alles wieder rückgängig gemacht */

    std::streambuf* oldbuf = std::cout.rdbuf();

    std::cout.rdbuf(datei.rdbuf());

    std::cout << "Dieser Text wurde nach std::cout geschrieben" << std::endl;

    std::cout.rdbuf(oldbuf);
}


In C++ kann man leider std::cout nicht einfach was anderes Zuweisen. Hier muß man etwas mehr Kenntnis zum Aufbau der Objekte haben: Stream benutzen zum echten Abspeichern der Daten Streambuffer (die Streams selbst machen "nur" Formatierungen), daher muß man hier den Streambuffer von std::cout verändern. Auch hier sollte der alte Streambuffer wieder zurückgesetzt werden. Zugriff auf den StreamBuffer bietet die Routine rdbuf.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 24.06.2003 um 18:32 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: