io/redirect.cpp

Das folgende Code-Beispiel stammt aus dem Buch
Objektorientiertes Programmieren in C++ - Ein Tutorial für Ein- und Umsteiger
von Nicolai Josuttis, Addison-Wesley München, 2001
© Copyright Nicolai Josuttis 2001


#include <iostream>
#include <fstream>
#include <string>

void redirect(std::ostream&,const std::string&);

int main()
{
    std::cout << "erste Zeile" << std::endl;

    redirect(std::cout, "redirect.txt"); // cout nach redirect.txt umleiten

    std::cout << "letzte Zeile" << std::endl;
}

void redirect (std::ostream& strm, const std::string& dateiname)
{
    // Datei (mit dazugehörigem Puffer) zum Schreiben öffnen
    std::ofstream datei(dateiname.c_str());
    
    // Ausgabepuffer des übergebenen Streams merken
    std::streambuf* strm_puffer = strm.rdbuf();

    // Ausgaben in die Datei umlenken
    strm.rdbuf(datei.rdbuf());

    datei << "direkt in die Datei geschriebene Zeile" << std::endl;
    strm  << "auf den umgelenkten Stream geschriebene Zeile"
          << std::endl;

    // alten Ausgabepuffer des übergebenen Streams restaurieren
    strm.rdbuf(strm_puffer);

}  // schließt die Datei und den dazugehörigen Puffer