C#メモ ファイルにConsole.WriteLine()の文字列を出力してみる

C#

デバッグするときはいいんだけど、GUIありのアプリをリリースビルドしたときに何かあったとき原因がわかんなくて困ったので。

ポイントとしてはこんなとこ。

  • ファイルに出力するためにStreamWriterを作成する
  • Console.WriteLineの出力先をファイルに変更する

んで、コードとしてはこんな感じ。

// ファイルへ出力する場合
// ※文字化けしちゃうかもしれないので文字コードは実行環境にしとく
using (StreamWriter objWriter = new StreamWriter("C:\\Data\\log.txt", false, Encoding.Default))
{
	// 文字列が全部出力されるようにフラッシュの設定をONにする
	objWriter.AutoFlush = true;
	// ちゃんと出力されるようにスレッドセーフにしとく
	System.IO.TextWriter objTextWriter = System.IO.TextWriter.Synchronized(objWriter);
	// 出力先をファイルに変更する
	Console.SetOut(objWriter);
	// 文字列を出力する
	Console.WriteLine("ファイルへ出力");
}

実行したらこんな感じ。

ファイルへ出力

ちなみに、標準出力(コンソール)に出力先を戻すにはこんな感じ。

// コンソールへ出力する場合
// ※ファイル出力に変えたときは元に戻す必要があるので注意
// ※文字化けしちゃうかもしれないので文字コードは実行環境にしとく
using (StreamWriter objStandertWriter = new StreamWriter(Console.OpenStandardOutput(),Encoding.Default))
{
	// 文字列が全部出力されるようにフラッシュの設定をONにする
	objStandertWriter.AutoFlush = true;
	// 出力先をコンソールに変更する
	Console.SetOut(objStandertWriter);
	// 文字列を出力する
	Console.WriteLine("コンソールへ出力");
}

んで、結果はこんな感じ。

コンソールへ出力
続行するには何かキーを押してください . . .

そんなこんなで明日への自分へのメモってことで。