検索
連載

Console.WriteLineの出力をファイルに書き込むには?[C#、VB].NET TIPS

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「.NET TIPS」のインデックス

連載目次

 Consoleクラス(System名前空間)のWriteLineメソッドは、(コンソール・アプリケーションにおいて)画面に文字列を出力するための基本的なメソッドで、C言語のprintf関数に相当するものだ。

 本稿ではConsole.WriteLineメソッドの出力を、メソッドの呼び出しはそのままで、ファイルに出力する方法について説明する。

SetOutメソッドによる出力先(Outプロパティ)の設定

 そもそも、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("UTF-8")); // 文字コード

    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("UTF-8"))

    Console.SetOut(sw) ' 出力先(Outプロパティ)を設定

    Console.WriteLine("hello world!")

    sw.Dispose() ' ファイルを閉じてオブジェクトを破棄
  End Sub
End Class

' コンパイル方法:vbc SetOutText.vb

Console.WriteLineの出力をファイルに書き込むサンプル・プログラム(上:C#、下:VB)

 なお、StreamWriterクラスは内部でバッファリングを行うため、出力は即座にファイルへ書き込まれるとは限らない。強制的にファイルへの書き込みを行うには、Flushメソッドを呼び出せばよい。

カテゴリ:クラス・ライブラリ 処理対象:テキスト・ファイル
使用ライブラリ:Consoleクラス(System名前空間)
使用ライブラリ:TextWriterクラス(System.IO名前空間)
使用ライブラリ:StreamWriterクラス(System.IO名前空間)

「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.