SetIn, SetOut, SetErrorの各メソッドを使うと、実行時に標準ストリームを任意のTextReader/Writerへとリダイレクトすることができます。 リダイレクトを行うと、Console.WriteLineやReadLineなどのメソッドによる入出力先は、指定されたTextReader/Writerへと変更されます。

次の例ではSetOutメソッドを使って標準出力の出力先を実行時に開いたファイルに変更しています。

標準出力をStreamWriterにリダイレクトする
using System;
using System.IO;

class Sample {
  static void Main()
  {
    // この内容はデフォルトの標準出力に書き込まれる
    Console.WriteLine("Hello, world!");

    // ファイルstdout.txtへ書き込むStreamWriterを作成する
    StreamWriter writer = new StreamWriter("stdout.txt");

    // 書き込みの度にバッファをフラッシュさせるためにAutoFlushをtrueにする
    writer.AutoFlush = true;

    // 作成したStreamWriterを標準出力の出力先にする
    Console.SetOut(writer);

    // この内容はstdout.txtに書き込まれる
    Console.WriteLine("こんにちは、世界!");
  }
}
実行結果
>sample.exe
Hello, world!

>type stdout.txt
こんにちは、世界!

TextReader/Writerクラスは抽象クラスであるため、たいていの場合リダイレクト先の設定には派生クラスであるStreamReader/Writerを使うことになります。 TextReader/WriterおよびStreamReader/Writerの作成や扱い方についてはStreamReaderクラス・StreamWriterクラスを参照してください。

SetIn, SetOut等のメソッドではStreamをリダイレクト先として直接設定することはできません。 Streamをリダイレクト先として設定したい場合は、そのStreamをベースにしてStreamReader/Writerを作成する必要があります。 具体的な方法についてはStreamReaderクラス・StreamWriterクラス §.任意のStreamからの読み込み・書き込みを参照してください。