この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Consoleクラス(System名前空間)のWriteLineメソッドは、(コンソール・アプリケーションにおいて)画面に文字列を出力するための基本的なメソッドで、C言語のprintf関数に相当するものだ。
本稿ではConsole.WriteLineメソッドの出力を、メソッドの呼び出しはそのままで、ファイルに出力する方法について説明する。
そもそも、ConsoleクラスのWriteLineメソッドは、同じくConsoleクラスのOutプロパティに設定されているTextWriterオブジェクトに対して、文字列を書き込むという動作を行う。既定では、そのTextWriterオブジェクトの出力先は標準出力(つまりは画面)である。
Outプロパティは読み取り専用の静的プロパティだが、それを変更するためのSetOutメソッドが用意されており、任意のTextWriterオブジェクトを指定できる。つまり、WriteLineメソッドの呼び出しより前のタイミングで、ファイルに対するTextWriterオブジェクトを作成し、それをSetOutメソッドで設定しておけばよい。
以下のサンプル・プログラムでは、TextWriterクラス(System.IO名前空間)の派生クラスであるStreamWriterクラスにより、ファイル(text.txt)に対するTextWriterオブジェクトを作成し、それをSetOutメソッドにより、Outプロパティに設定している。これによりWriteLineメソッドの出力はすべて、text.txtに書き込まれる。
// SetOutText.cs
using System;
using System.IO;
class Program {
  static void Main() {
    StreamWriter sw = new StreamWriter(
      "test.txt", // 出力先ファイル名
      true, // 追加書き込み
      System.Text.Encoding.GetEncoding("Shift_JIS")); // 文字コード
    Console.SetOut(sw); // 出力先(Outプロパティ)を設定
    Console.WriteLine("hello world!");
    sw.Dispose(); // ファイルを閉じてオブジェクトを破棄
  }
}
// コンパイル方法:csc SetOutText.cs
' SetOutText.vb
Imports System
Imports System.IO
Class Program
  Shared Sub Main()
    Dim sw As New StreamWriter("test.txt", true, _
                    System.Text.Encoding.GetEncoding("Shift_JIS"))
    Console.SetOut(sw) ' 出力先(Outプロパティ)を設定
    Console.WriteLine("hello world!")
    sw.Dispose() ' ファイルを閉じてオブジェクトを破棄
  End Sub
End Class
' コンパイル方法:vbc SetOutText.vb
なお、StreamWriterクラスは内部でバッファリングを行うため、出力は即座にファイルへ書き込まれるとは限らない。強制的にファイルへの書き込みを行うには、Flushメソッドを呼び出せばよい。
カテゴリ:クラス・ライブラリ 処理対象:テキスト・ファイル
使用ライブラリ:Consoleクラス(System名前空間)
使用ライブラリ:TextWriterクラス(System.IO名前空間)
使用ライブラリ:StreamWriterクラス(System.IO名前空間) 
Copyright© Digital Advantage Corp. All Rights Reserved.