文字コードを指定してテキストファイルに書き込むここでは、テキストファイルに文字列を書き込む方法について説明します。 ストリームを使ってテキストファイルに書き込む最も基本的な方法は、StreamWriterクラスを使う方法です。 早速ですが、以下にStreamWriterクラスを用いた簡単な例を示します。この例ではテキストボックス"TextBox1"の内容をShift JISコードでテキストファイル"C:\test.txt"に書き込んでいます。 'Shift JISで書き込む '書き込むファイルが既に存在している場合は、上書きする Dim sw As New System.IO.StreamWriter("c:\test.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.txt", false, System.Text.Encoding.GetEncoding("shift_jis")); //TextBox1.Textの内容を書き込む sw.Write(TextBox1.Text); //閉じる sw.Close(); StreamWriterは使用後にCloseメソッドを使って閉じる必要があります。通常は、usingステートメントやtry...finallyを使って確実にCloseメソッドが呼び出されるようにします。詳しくは、「Dispose、Closeが確実に呼び出されるようにする」をご覧ください。 JISやEUCなどの文字コードで保存する場合は、"shift_jis"の部分を"iso-2022-jp"や"euc-jp"などに変えます。UTF-8の場合は、Encodingの指定自体を省略できます。詳しくは、「文字コードを指定してテキストファイルを読み込む」で説明しています。 Writeメソッドを呼び出してすぐにデータがファイルに書き込まれるとは限りません。Flashメソッドを呼び出すことにより、書き込みが行われます。CloseメソッドでもFlashが呼び出されます。Writeを呼び出した時に自動的にFlashが呼び出されるようにするには、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.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.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.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() '閉じる sw.Close() //ファイルを上書きし、Shift JISで書き込む System.IO.StreamWriter sw = new System.IO.StreamWriter( @"c:\test.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.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.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以降で、ストリームを使わずに簡単に書き込む.NET Framework 2.0からは、File.WriteAllTextメソッドを使って文字列をテキストファイルに書きこむことができます。WriteAllTextメソッドは、文字列を書き込んで、ファイルを閉じます。ファイルが既に存在していた場合は、上書きします。例外が発生しても確実にファイルを閉じてくれます。 すでにファイルが存在しているときに追加で書き込むには、File.AppendAllTextメソッドを使います。 これらのメソッドを使ってテキストファイルに文字列を書き込む例を以下に示します。 '書き込み先のテキストファイル Dim filePath As String = "C:\test.txt" '文字コード(ここでは、Shift JIS) Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("shift_jis") 'TextBox1の内容を書き込む 'ファイルが存在しているときは、上書きする System.IO.File.WriteAllText(filePath, TextBox1.Text, enc) 'ファイルの末尾にTextBox1の内容を書き加える System.IO.File.AppendAllText(filePath, TextBox1.Text, enc) //書き込み先のテキストファイル string filePath = @"C:\test.txt"; //文字コード(ここでは、Shift JIS) System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); //TextBox1の内容を書き込む //ファイルが存在しているときは、上書きする System.IO.File.WriteAllText(filePath, TextBox1.Text, enc); //ファイルの末尾にTextBox1の内容を書き加える System.IO.File.AppendAllText(filePath, TextBox1.Text, enc);
補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.FileSystem.WriteAllTextメソッドで同様のことができます。
補足:文字列の配列をテキストファイルに書き込むメソッドとして、File.WriteAllLinesメソッドが用意されています。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright(C) DOBON!. All rights reserved.
|