連載
» 2018年12月26日 05時00分 公開

.NET TIPS:テキストファイルの内容を簡単に読み込むには?[C#/VB、.NET 2.0以降]

.NET Framework 2.0以降で利用可能なFileクラスのReadAllTextメソッドとReadAllLinesメソッドを使うと、テキストファイルの内容を簡単に変数や配列に読み込める。

[遠藤孝信, 山本康彦,共著]
「.NET TIPS」のインデックス

連載「.NET TIPS」

本稿は2006/01/13に初版公開された記事を改訂し、Visual Studio 2017でコードの動作検証、図版の追加、全般的な構成の変更などを行ったものです。


 「TIPS:テキストファイルの内容を読み込むには?」では、テキストファイルを文字列やコレクションに読み込む方法について解説した。そこでも解説されているように、テキストファイルの読み込みには、ファイルのオープン、読み込み、クローズの処理が必要となる。

 .NET Framework 2.0では、これらの処理を1つのメソッド呼び出しで可能とするReadAllTextメソッドとReadAllLinesメソッドがFileクラス(System.IO名前空間)に追加されている。

POINT テキストファイルの内容を簡単に読み込む方法

テキストファイルの内容を簡単に読み込む方法まとめ テキストファイルの内容を簡単に読み込む方法まとめ


 特定のトピックをすぐに知りたいという方は以下のリンクを活用してほしい。

関連TIPS

 テキストファイルの読み込みには、その目的や利用している.NET Frameworkのバージョンによって、さまざまな方法がある。適切な方法を選んでほしい。特に.NET Framework 4.5以降でクライアントアプリを作る場合は、非同期的に読み込む方法が適している。


File.ReadAllTextメソッドによる文字列への読み込み

 テキストファイル全体を1つの文字列に読み込む場合には、FileクラスのReadAllTextメソッドが利用できる。以下にこれを使ったサンプルプログラムを示す。

// readalltext.cs

using System.IO;

class ReadAllText {
  static void Main() {

    // シフトJISのファイルの読み込み
    string text1 = File.ReadAllText("shiftjis.txt",
      System.Text.Encoding.GetEncoding("Shift_JIS"));

    // UTF-8のファイルの読み込み
    string text2 = File.ReadAllText("utf8.txt");
  }
}

// コンパイル方法:csc readalltext.cs

' readalltext.vb

Imports System.IO

Class ReadAllText
  Shared Sub Main()

    ' シフトJISのファイルの読み込み
    Dim text1 As String = File.ReadAllText("shiftjis.txt", _
      System.Text.Encoding.GetEncoding("Shift_JIS"))

    ' UTF-8のファイルの読み込み
    Dim text2 As String = File.ReadAllText("utf8.txt")

  End Sub
End Class

' コンパイル方法:vbc readalltext.vb

ReadAllTextメソッドを使用したサンプルプログラム(上:C#、下:VB)
Visual StudioでVBプロジェクトを新規作成してサンプルプログラムを試してみるのであれば、必要なImports文をモジュールの先頭に追加して、上記Mainプロシージャの内容を、新規作成したプロジェクトのMainプロシージャにコピー&ペーストするようにしよう(全コードをそのままコピー&ペーストすると、ソリューションエクスプローラーの[My Project]を開き、[アプリケーション]タブで[スタートアッププロジェクト]を変更する必要がある。以下、同様)。
C#版サンプルプログラムのダウンロード
VB版サンプルプログラムのダウンロード

 シフトJISファイルの読み込みの例で示しているように、テキストファイルの文字コードがUTF-8以外の場合には、読み込み時に使用されるエンコーディング(System.Text名前空間のEncodingオブジェクト)を第2パラメーターに指定する。第1パラメーターは読み込むテキストファイルのパス名である。

File.ReadAllLinesメソッドによる文字列配列への読み込み

 読み込んだテキストを1行ずつ処理したい場合には、1つの文字列変数ではなく、各行を要素とする文字列配列として読み込めた方が便利である。これを行ってくれるのがFileクラスのReadAllLinesメソッドだ。

 以下にReadAllLinesメソッドを使ったサンプルプログラムを示す。パラメーターの意味は上述したReadAllTextメソッドと同じである。メソッドの戻り値は文字列の配列となる。

// readalllines.cs

using System.IO;

class ReadAllLines {
  static void Main() {

    // シフトJISのファイルの読み込み
    string[] lines1 = File.ReadAllLines("shiftjis.txt",
      System.Text.Encoding.GetEncoding("Shift_JIS"));

    // UTF-8のファイルの読み込み
    string[] lines2 = File.ReadAllLines("utf8.txt");
  }
}

// コンパイル方法:csc readalllines.cs

' readalllines.vb

Imports System.IO

Class ReadAllLines
  Shared Sub Main()

    ' シフトJISのファイルの読み込み
    Dim lines1 As String() = File.ReadAllLines("shiftjis.txt", _
      System.Text.Encoding.GetEncoding("Shift_JIS"))

    ' UTF-8のファイルの読み込み
    Dim lines2 As String() = File.ReadAllLines("utf8.txt")

  End Sub
End Class

' コンパイル方法:vbc readalllines.vb

ReadAllLinesメソッドを使用したサンプルプログラム(上:C#、下:VB)
C#版サンプルプログラムのダウンロード
VB版サンプルプログラムのダウンロード

 なお、ReadAllLinesメソッドはファイル末尾の改行記号を無視する(あってもなくても同じ結果になる)。たいていのテキストエディタは、ファイル末尾に改行記号があると、その後ろにもう1行あるように表示する。それと比べると、ファイル末尾に改行記号がある場合にReadAllLinesメソッドで得られる行数は1行少なくなる。

 これら2つのメソッドを自分で実装するのは容易であるが、頻繁に利用する定型処理であるため、1つのメソッドでまとめられているのは便利である。

更新履歴

【2018/12/26】Visual Studio 2017でコードの動作検証、図版の追加、全般的な構成の変更などを行いました。

【2006/01/13】初版公開。


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。