"자습 C# 버전 3"11장(p416)에서 표준 흐름 방향을 끄고 표준 출력을 모니터로 되돌리는 방법

'자습 C#3판'11장(p416)에서 표준 스트리밍 리디렉션 프로젝트에 기재된 코드를 입력하고 실행하면 출력 파일일 뿐 모니터에 아래 그림처럼 어떤 내용도 표시되지 않고 무엇을 실행했는지 알 수 없기 때문에 앞뒤 콘솔로로 리디렉션한다.Write 문의 여러 행이 추가되었습니다.

그림-1 모니터에 아무것도 안 나와요.
그런데 오류가 생겼어요!
"ControlPoint 예외 없음:
System.ObjectDisposeException:
닫힌 TextWriter에 쓸 수 없습니다."

그림-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 오류 수정 결과

좋은 웹페이지 즐겨찾기