Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8901

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

$
0
0

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

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

ところがエラー発生!

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

実行結果2.png

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

usingSystem;usingSystem.IO;usingSystem.Text;namespacep417{classRedirect{staticvoidMain(string[]args){Console.WriteLine("logfile.txtへ出力するようリダイレクト");StreamWriterlog_out;try{log_out=newStreamWriter("logfile.txt");}catch(IOExceptionexc){Console.WriteLine(exc.Message);return;}// logfile.txtへ出力するようリダイレクトConsole.SetOut(log_out);try{Console.WriteLine("This is the start of the log file.");for(inti=0;i<10;i++)Console.WriteLine(i);Console.WriteLine("This is the end of the log file.");}catch(IOExceptionexc){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 エラー修正後の結果


Viewing all articles
Browse latest Browse all 8901

Trending Articles