.NET TIPS

テキスト・ファイルの内容を簡単に書き込むには?[2.0のみ、C#、VB]

デジタルアドバンテージ 一色 政彦
2007/12/06

 「TIPS:ファイルにテキストを書き込むには?」では、テキスト・ファイルにテキスト内容を書き込む方法を紹介した。その方法を実践するには、次の3つのステップが必要だった。

(1)テキスト・ファイルを開く、もしくは作成する
(2)テキスト内容を書き込む
(3)テキスト・ファイルを閉じる

 .NET Framework 2.0では、これらのステップを省略して、1つのメソッド呼び出しだけで、テキスト・ファイルにテキスト内容を書き込む方法が提供されている。それが、次の静的メソッド群だ。

(A)File.WriteAllText(String、String、Encoding)メソッド
(B)File.AppendAllText(String、String、Encoding)メソッド
(C)File.WriteAllLines(String、String[]、Encoding)メソッド

 ( )内はパラメータのデータ型を示す。メソッドの先頭にある“File”はSystem.IO名前空間のクラスで、パラメータにある“Encoding”はSystem.Text名前空間のクラスのオブジェクトである(なお、Encodingオブジェクトの取得方法については「TIPS:Encodingクラスで扱えるエンコーディング名は?」を参考にされたい)。“String[]”は文字列配列を意味する。

 いずれも第1パラメータがファイル・パス、第2パラメータはテキスト内容、第3パラメータがテキスト・ファイルの文字エンコードである。要するにいずれのメソッドを呼び出しても、「第1パラメータに指定されたファイルに、第3パラメータの文字エンコード形式で、第2パラメータのテキスト内容をすべて書き込む」という処理を実行する。

 もちろん各メソッドには動作の違いがある。

 例えば(メソッド呼び出し前に)既存のファイルが存在する場合、(A)のFile.WriteAllTextメソッドは「いったん既存の内容を完全に削除してから、新たにテキスト内容を書き込む」のに対し、(B)のFile.AppendAllTextメソッドは「既存のテキスト内容をすべて残したまま、その末尾にテキスト内容を追記する」仕様になっている。ただし書き込み対象のファイルが存在しない場合には、(A)(B)いずれのメソッドも(動作は同じで)新たにファイルを自動的に作成したうえで、そこにテキスト内容を書き込む仕様である。

 また、(C)のFile.WriteAllLinesは、(A)や(B)のメソッドとは違い、(第2パラメータの)文字列配列に格納された各文字列を1行ずつ改行(CR-LF)してファイルに書き出す仕様になっている。なお、既存のファイルが存在する場合は、(A)と同じで、「いったん既存の内容を完全に削除してから、新たにテキスト内容を書き込む」ので、注意してほしい((B)のように追記を行うFile.AppendAllLinesのようなメソッドは提供されていない……)。

 以上でメソッドの使い方と動作の違いはご理解いただけただろう。次のコードは、それぞれのメソッドを利用したコンソール・アプリケーションのサンプル・プログラムである。

using System.Text;
using System.IO;

class Program
{
  static void Main(string[] args)
  {
    Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");

    File.WriteAllText(@"C:\Test.txt", "テスト書込。", sjisEnc);
    File.AppendAllText(@"C:\Test.txt", "テスト追記。", sjisEnc);
    // 「C:\Test.txt」ファイルへの書き込み結果:
    // テスト書込。テスト追記。

    string[] manyLines = {"テスト", "書き込み", "改行"};
    File.WriteAllLines(@"C:\TestLines.txt", manyLines, sjisEnc);
    // 「C:\TestLines.txt」ファイルへの書き込み結果:
    // テスト
    // 書き込み
    // 改行
    //
  }
}
Imports System.Text
Imports System.IO

Module Module1

  Sub Main()
    Dim sjisEnc As Encoding = Encoding.GetEncoding("Shift_JIS")

    File.WriteAllText("C:\Test.txt", "テスト書込。", sjisEnc)
    File.AppendAllText("C:\Test.txt", "テスト追記。", sjisEnc)
    ' 「C:\Test.txt」ファイルへの書き込み結果:
    ' テスト書込。テスト追記。

    Dim manyLines() As String = {"テスト", "書き込み", "改行"}
    File.WriteAllLines("C:\TestLines.txt", manyLines, sjisEnc)
    ' 「C:\TestLines.txt」ファイルへの書き込み結果:
    ' テスト
    ' 書き込み
    ' 改行
    '
  End Sub

End Module
テキスト・ファイルに内容を書き込むサンプル・プログラム(上:C#、下:VB)

 シンプルなコードなので説明は割愛する。実行結果については、コード中のコメントを参考にしてほしい。

 ちなみに、VB(Visual Basic 2005)では次のMy機能のメソッドが提供されている。

My.Computer.FileSystem.WriteAllText(String、String、Boolean、Encoding)メソッド

 このメソッドでは第3パラメータにBoolean型の値を指定するが、これは「いったん既存の内容を完全に削除してから、新たにテキスト内容を書き込むか」(=False)、「既存のテキスト内容をすべて残したまま、その末尾にテキスト内容を追記するか」(=True)を指定するためのものである。つまり、Falseを指定すれば(A)のFile.WriteAllTextメソッドと同じ動作になり、Trueを指定すれば(B)のFile.AppendAllTextメソッドと同じ動作になる。

 そのほかのパラメータは前述のメソッド群と同じで、第1パラメータはファイル・パス、第2パラメータはテキスト内容、第4パラメータが文字エンコードだ。

 ちなみに、本稿の処理とは逆の「テキストを読み込む方法」については、「TIPS:テキスト・ファイルの内容を簡単に読み込むには?」で紹介されているので、併せて参照されたい。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:クラス・ライブラリ 処理対象:テキスト・ファイル
使用ライブラリ:Fileクラス(System.IO名前空間)
使用ライブラリ:Encodingクラス(System.Text名前空間)
関連TIPS:ファイルにテキストを書き込むには?
関連TIPS:Encodingクラスで扱えるエンコーディング名は?
関連TIPS:テキスト・ファイルの内容を簡単に読み込むには?

この記事と関連性の高い別の.NET TIPS
ファイルにテキストを書き込むには?[C#、VB]
テキスト・ファイルの内容を簡単に読み込むには?
テキストファイルの内容を非同期的に書き込むには?[C#/VB、.NET 4.5]
文字列で指定したメソッドを呼び出すには?
メソッドやプロパティの有無を確認して呼び出すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間