Redirection

This code redirect the standard output to cout.txt file.


#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    {
        ofstream of("cout.txt");
        of.copyfmt( cout );
        cout.rdbuf( of.rdbuf() );

        int i;
        while ( cin >> i )
            cout << i;
    }   // here the local of destroyes the streambuf of cout
    cout << 1;
    return 0;
}  

Be care, because when of goes out of life, destroyes the streambuffer. Therefore the following is the correct:


#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    {
        ofstream of("cout.txt");
        of.copyfmt( cout );
        streambuf *saved_buffer = cout.rdbuf();
        cout.rdbuf( of.rdbuf() );

        int i;
        while ( cin >> i )
            cout << i;
        cout.rdbuf(saved_buffer);    
    }   // here the local of destroyes the streambuf of cout
    cout << 1;
    return 0;
}