DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DOBON.NET

文字コードを指定してテキストファイルに書き込む

ストリームを使ってテキストファイルに書き込む

StreamWriterクラスを用いた簡単な例を示します。次の例ではテキストボックスTextBox1の内容をテキストファイル"C:\test.txt"に書き込んでいます。ここではShift JISコードで保存します。

[VB.NET]
'StreamWriterの初期化
'ファイルを上書きし、Shift JISで書き込む
'2番目のパラメータをTrueにすると、上書きせずにファイルの末尾に追加
Dim sw As New System.IO.StreamWriter("c:\test.txt", _
    False, _
    System.Text.Encoding.GetEncoding(932))
'TextBox1.Textの内容をすべて書き込む
sw.Write(TextBox1.Text)
'閉じる
sw.Close()
[C#]
//StreamWriterの初期化
//ファイルを上書きし、Shift JISで書き込む
//2番目のパラメータをTrueにすると、上書きせずにファイルの末尾に追加
System.IO.StreamWriter sw =
    new System.IO.StreamWriter(@"c:\test.txt",
    false,
    System.Text.Encoding.GetEncoding(932));
//TextBox1.Textの内容をすべて書き込む
sw.Write(TextBox1.Text);
//閉じる
sw.Close();

そのほかの文字コード(JIS、EUCなど)で保存する時は、適当なEncodingを指定します。Encodingに関しては「文字コードを指定してテキストファイルを読み込む」を参考にしてください。なおEncodingを省略した時は、UTF-8となります。

補足:Writeメソッドを呼び出してすぐにデータがファイルに書き込まれるとは限りません。Flashメソッドを呼び出すことにより、書き込まれます。CloseメソッドでもFlashが呼び出されます。AutoFlushプロパティをTrueにすることにより、Writeを呼び出した時にFlashが呼び出されるようになります。

補足:StreamWriterはFileShare.Readとしてファイルを開くようです。よって、StreamWriterで開いているファイルは、別のプロセスからは読み込みは可能でも、書き込みはできません。またバッファのサイズは4096(0x1000)バイトとなるようです。

補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.FileSystem.OpenTextFileWriterメソッドで同じことができます。

一行ずつ書き込む

一行書き込むには、WriteLineメソッドを使います。WriteLineで書き込むと、最後に自動的に改行文字列を挿入します。改行文字列は、NewLineプロパティで指定されている文字列になります(デフォルトで、「キャリッジリターン+ラインフィード」です)。

[VB.NET]
'StreamWriterの初期化
'ファイルを上書きし、Shift JISで書き込む
Dim sw As New System.IO.StreamWriter("c:\test.txt", _
    False, _
    System.Text.Encoding.GetEncoding(932))
'「こんにちは」を10行書き込む
Dim i As Integer
For i = 0 To 9
    sw.WriteLine("こんにちは")
Next i
'閉じる
sw.Close()
[C#]
//StreamWriterの初期化
//ファイルを上書きし、Shift JISで書き込む
System.IO.StreamWriter sw =
    new System.IO.StreamWriter(@"c:\test.txt",
    false,
    System.Text.Encoding.GetEncoding(932));
//「こんにちは」を10行書き込む
for (int i = 0; i < 10; i++)
{
    sw.WriteLine("こんにちは");
}
//閉じる
sw.Close();

.NET Framework 2.0以降で、ストリームを使わずに簡単に書き込む

.NET Framework 2.0からは、File.AppendAllTextメソッドにより、指定されたファイルに、指定した文字列を追加書き込みすることができます。指定したファイルが存在しなければ、新しく作成されます。

以下にAppendAllTextメソッドにより、テキストファイルに文字列を書き込む例を示します。

[VB.NET]
'追加書き込み先のテキストファイル
'なければ、作成される
Dim textFile As String = "C:\text.txt"
'文字コード(ここでは、Shift JIS)
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(932)
'書き込む文字列
Dim str As String = "こんにちは。" + vbCrLf

'textFileの末尾にstrを書き加える
System.IO.File.AppendAllText(textFile, str, enc)
[C#]
//追加書き込み先のテキストファイル
//なければ、作成される
string textFile = "C:\\text.txt";
//文字コード(ここでは、Shift JIS)
System.Text.Encoding enc = System.Text.Encoding.GetEncoding(932);
//書き込む文字列
string str = "こんにちは。\r\n";

//textFileの末尾にstrを書き加える
System.IO.File.AppendAllText(textFile, str, enc);

補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.FileSystem.WriteAllTextメソッドで同様のことができます。ただしWriteAllTextは追加書き込みだけでなく、上書きを指定することもできます。

  • 履歴:
  • 2006/11/20 「一行ずつ書き込む」の追加など。
  • 2007/1/25 AppendAllTextメソッドに関する記述を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。