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
なお、StreamWriterクラスは内部でバッファリングを行うため、出力は即座にファイルへ書き込まれるとは限らない。強制的にファイルへの書き込みを行うには、Flushメソッドを呼び出せばよい。
カテゴリ:クラス・ライブラリ 処理対象:テキスト・ファイル
使用ライブラリ:Consoleクラス(System名前空間)
使用ライブラリ:TextWriterクラス(System.IO名前空間)
使用ライブラリ:StreamWriterクラス(System.IO名前空間)
Copyright© Digital Advantage Corp. All Rights Reserved.