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. |