ここでは、テキストファイルに文字列を書き込む方法について説明します。
最も基本的な方法は、StreamWriterクラスのWriteメソッドを使う方法です。
早速ですが、以下に簡単な例を示します。この例ではテキストボックス"TextBox1"の内容をShift JISコードでテキストファイル"C:\test\1.txt"に書き込んでいます。
'Shift JISで書き込む '書き込むファイルが既に存在している場合は、上書きする Dim sw As New System.IO.StreamWriter("C:\test\1.txt", _ False, _ System.Text.Encoding.GetEncoding("shift_jis")) 'TextBox1.Textの内容を書き込む sw.Write(TextBox1.Text) '閉じる sw.Close()
//Shift JISで書き込む //書き込むファイルが既に存在している場合は、上書きする System.IO.StreamWriter sw = new System.IO.StreamWriter( @"C:\test\1.txt", false, System.Text.Encoding.GetEncoding("shift_jis")); //TextBox1.Textの内容を書き込む sw.Write(TextBox1.Text); //閉じる sw.Close();
StreamWriterは使用後にCloseメソッドを使って閉じる必要があります。通常は、usingステートメントやtry...finallyを使って確実にCloseメソッドが呼び出されるようにします。詳しくは、「Dispose、Closeが確実に呼び出されるようにする」をご覧ください。
「Encoding.GetEncoding("shift_jis")」というのは、Shift-JISのエンコーディングを使用して文字列をファイルに書き込めという意味です。もしEUCで書き込みたいのであれば、"shift_jis"を"euc-jp"に変えます。JISであれば、"iso-2022-jp"にします。これについて詳しくは、「目的の文字コードに合ったEncodingオブジェクトを取得する」で説明します。
UTF-8で書き込む時は、Encodingの指定自体を省略できます。ただしこの場合、BOM無しUTF-8になります。EncodingにEncoding.UTF8プロパティを指定した時は、BOM有りUTF-8になります。詳しくは、「BOM無しUTF-8でテキストファイルに書き込む」で説明します。
補足:UTF-8で書き込みをするのであれば、File.CreateTextメソッドを使ってStreamWriterオブジェクトを作成することもできます。
Writeメソッドを呼び出してすぐにデータがファイルに書き込まれるとは限りません。Flushメソッドを呼び出すことにより、書き込みが行われます。CloseメソッドでもFlushが呼び出されます。Writeを呼び出した時に自動的にFlushが呼び出されるようにするには、AutoFlushプロパティをTrueにします。
補足:StreamWriterはFileShare.Readとしてファイルを開きます。よって、StreamWriterで開いているファイルは、別のプロセス(あるいは自分のプロセス)からの読み込みは可能でも、書き込みはできません。この設定を変更する方法は、「ファイルをロック(アクセスを制限)する」で紹介します。
補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.FileSystem.OpenTextFileWriterメソッドを使ってStreamWriterオブジェクトを作成することもできます。また、UTF-8で書き込むのであれば、File.CreateTextメソッドを使うこともできます。
先の例では、書き込もうとしているファイルが既に存在している場合、上書きします。ファイルが存在しているときにファイルの末尾に追加して書き込むには、StreamWriterコンストラクタの2番目のパラメータをTrueにします。
'Shift JISで書き込む '書き込むファイルが既に存在している場合は、ファイルの末尾に追加する Dim sw As New System.IO.StreamWriter("C:\test\1.txt", _ True, _ System.Text.Encoding.GetEncoding("shift_jis")) 'TextBox1.Textの内容を書き込む sw.Write(TextBox1.Text) '閉じる sw.Close()
//Shift JISで書き込む //書き込むファイルが既に存在している場合は、ファイルの末尾に追加する System.IO.StreamWriter sw = new System.IO.StreamWriter( @"C:\test\1.txt", true, System.Text.Encoding.GetEncoding("shift_jis")); //TextBox1.Textの内容を書き込む sw.Write(TextBox1.Text); //閉じる sw.Close();
補足:UTF-8で追加の書き込みをするのであれば、File.AppendTextメソッドを使ってStreamWriterオブジェクトを作成することもできます。
一行書き込むには、WriteLineメソッドを使うと便利です。WriteLineで書き込むと、自動的に末尾に改行文字列が挿入されます。改行文字列は、NewLineプロパティで指定されている文字列(デフォルトで、「キャリッジリターン+ラインフィード」)になります。
'ファイルを上書きし、Shift JISで書き込む Dim sw As New System.IO.StreamWriter("C:\test\1.txt", _ False, _ System.Text.Encoding.GetEncoding("shift_jis")) 'TextBox1.Textの内容を1行ずつ書き込む For Each line As String In TextBox1.Lines sw.WriteLine(line) Next '閉じる sw.Close()
//ファイルを上書きし、Shift JISで書き込む System.IO.StreamWriter sw = new System.IO.StreamWriter( @"C:\test\1.txt", false, System.Text.Encoding.GetEncoding("shift_jis")); //TextBox1.Textの内容を1行ずつ書き込む foreach (string line in TextBox1.Lines) { sw.WriteLine(line); } //閉じる sw.Close();
Writeメソッドを使って自分で改行文字列を挿入して書き込んでも同じようなことができます。
'ファイルを上書きし、Shift JISで書き込む Dim sw As New System.IO.StreamWriter("C:\test\1.txt", _ False, _ System.Text.Encoding.GetEncoding("shift_jis")) 'TextBox1.Textの内容を1行ずつ書き込む For Each line As String In TextBox1.Lines sw.Write(line + sw.NewLine) Next '閉じる sw.Close()
//ファイルを上書きし、Shift JISで書き込む System.IO.StreamWriter sw = new System.IO.StreamWriter( @"C:\test\1.txt", false, System.Text.Encoding.GetEncoding("shift_jis")); //TextBox1.Textの内容を1行ずつ書き込む foreach (string line in TextBox1.Lines) { sw.Write(line + sw.NewLine); } //閉じる sw.Close();
.NET Framework 2.0からは、File.WriteAllTextメソッドを使って文字列をテキストファイルに書きこむことができます。WriteAllTextメソッドは、文字列を書き込んで、ファイルを閉じます。ファイルが既に存在していた場合は、上書きします。例外が発生しても確実にファイルを閉じてくれます。
File.WriteAllLinesメソッドを使うと、String型の配列を書き込むことができます。配列の要素の末尾には改行文字列が付加されます。
すでにファイルが存在しているとき、その末尾に追加で書き込むには、File.AppendAllTextメソッドを使います。
これらのメソッドを使ってテキストファイルに文字列を書き込む例を以下に示します。
'書き込み先のテキストファイル Dim filePath As String = "C:\test\1.txt" '文字コード(ここでは、Shift JIS) Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("shift_jis") 'TextBox1の内容を書き込む 'ファイルが存在しているときは、上書きする System.IO.File.WriteAllText(filePath, TextBox1.Text, enc) System.IO.File.WriteAllLines(filePath, TextBox1.Lines, enc) 'ファイルの末尾にTextBox1の内容を書き加える System.IO.File.AppendAllText(filePath, TextBox1.Text, enc)
//書き込み先のテキストファイル string filePath = @"C:\test\1.txt"; //文字コード(ここでは、Shift JIS) System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); //TextBox1の内容を書き込む //ファイルが存在しているときは、上書きする System.IO.File.WriteAllText(filePath, TextBox1.Text, enc); System.IO.File.WriteAllLines(filePath, TextBox1.Lines, enc); //ファイルの末尾にTextBox1の内容を書き加える System.IO.File.AppendAllText(filePath, TextBox1.Text, enc);
補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.FileSystem.WriteAllTextメソッドで同様のことができます。