LoginSignup
1
0

More than 3 years have passed since last update.

「独習C# 第3版」第11章(p416) 標準ストリームのリダイレクトをクローズした後、標準出力をディスプレイに戻す方法

Last updated at Posted at 2019-11-18

「独習C# 第3版」第11章(p416) 標準ストリームリダイレクトの項目に記載されていたコードを入力後実行したら、当たり前であるがファイルを出力するだけで、ディスプレイには次の図のように何も表示されず、何が実行されたのか分からなかったので、リダイレクト前後にConsoloe.Write文の数行を追加してみました。

実行結果1.png
図-1 ディスプレイに何も表示されない様子

ところがエラー発生!

「ハンドルされていない例外:
System.ObjectDisposeException:
閉じているTextWriterに書き込むことはできません。」

実行結果2.png

図-2 エラーの様子
ソースコード

using System;
using System.IO;
using System.Text;


namespace p417
{
    class Redirect
    {
        static void Main(string[] args)
        {
            Console.WriteLine("logfile.txtへ出力するようリダイレクト");

            StreamWriter log_out;
            try
            {
                log_out = new StreamWriter("logfile.txt");
            }
            catch (IOException exc)
            {
                Console.WriteLine(exc.Message);
                return;
            }
            // logfile.txtへ出力するようリダイレクト
            Console.SetOut(log_out);

            try
            {
                Console.WriteLine("This is the start of the log file.");
                for (int i = 0; i < 10; i++) Console.WriteLine(i);
                Console.WriteLine("This is the end of the log file.");
            }
            catch (IOException exc)
            {
                Console.WriteLine(exc.Message);
            }
            log_out.Close();
/*
            // リダイレクトをディスプレイに戻す(以下、3行を追記。/*と*/記号を外せば、エラーが修正される。)
            var standardOutput = new StreamWriter(Console.OpenStandardOutput(),Encoding.Default);
            standardOutput.AutoFlush = true;    //StreamWriter が呼び出されるたびに、Write(Char) によって基になるストリームに対するバッファーをフラッシュするかどうかを示す値を取得または設定します。
            Console.SetOut(standardOutput);
*/

            // ディスプレイに出力
            Console.WriteLine("標準出力がファイルからディスプレイに戻る。");
            Console.WriteLine("リダイレクトの結果logfile.txtを、実行ファイルのあるフォルダに出力しました。");
            Console.WriteLine();
        }
    }
}

そこで、上記ソースコードの下側の/*......*/でコメントアウトした部分を追記し、解決しました。
実行結果3.png

図-3 エラー修正後の結果

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0