.NET Framework 2.0以降で利用可能なFileクラスのReadAllTextメソッドとReadAllLinesメソッドを使うと、テキストファイルの内容を簡単に変数や配列に読み込める。
本稿は2006/01/13に初版公開された記事を改訂し、Visual Studio 2017でコードの動作検証、図版の追加、全般的な構成の変更などを行ったものです。
「TIPS:テキストファイルの内容を読み込むには?」では、テキストファイルを文字列やコレクションに読み込む方法について解説した。そこでも解説されているように、テキストファイルの読み込みには、ファイルのオープン、読み込み、クローズの処理が必要となる。
.NET Framework 2.0では、これらの処理を1つのメソッド呼び出しで可能とするReadAllTextメソッドとReadAllLinesメソッドがFileクラス(System.IO名前空間)に追加されている。
特定のトピックをすぐに知りたいという方は以下のリンクを活用してほしい。
テキストファイルの読み込みには、その目的や利用している.NET Frameworkのバージョンによって、さまざまな方法がある。適切な方法を選んでほしい。特に.NET Framework 4.5以降でクライアントアプリを作る場合は、非同期的に読み込む方法が適している。
テキストファイル全体を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
シフトJISファイルの読み込みの例で示しているように、テキストファイルの文字コードがUTF-8以外の場合には、読み込み時に使用されるエンコーディング(System.Text名前空間のEncodingオブジェクト)を第2パラメーターに指定する。第1パラメーターは読み込むテキストファイルのパス名である。
読み込んだテキストを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メソッドはファイル末尾の改行記号を無視する(あってもなくても同じ結果になる)。たいていのテキストエディタは、ファイル末尾に改行記号があると、その後ろにもう1行あるように表示する。それと比べると、ファイル末尾に改行記号がある場合にReadAllLinesメソッドで得られる行数は1行少なくなる。
これら2つのメソッドを自分で実装するのは容易であるが、頻繁に利用する定型処理であるため、1つのメソッドでまとめられているのは便利である。
利用可能バージョン:.NET Framework 2.0以降
カテゴリ:クラスライブラリ 処理対象:テキストファイル
使用ライブラリ:Fileクラス(System.IO名前空間)
使用ライブラリ:Encodingクラス(System.Text名前空間)
関連TIPS:テキストファイルの内容を読み込むには?[C#/VB、.NET全バージョン]
関連TIPS:テキストファイルの内容を簡単かつ効率的に読み込むには?[4以降、C#、VB]
関連TIPS:テキストファイルの内容を非同期的に読み込むには?[C#/VB、.NET 4.5]
関連TIPS:ファイルにテキストを書き込むには?[C#、VB]
関連TIPS:バイナリ・ファイルを読み書きするには?
関連TIPS:テキストファイルの内容を非同期的に書き込むには?[C#/VB、.NET 4.5]
関連TIPS:バイナリファイルを非同期的に読み書きするには?[C#/VB、.NET 4.5]
関連TIPS:CSVファイルを読み込むには?[2.0のみ、C#、VB]
【2018/12/26】Visual Studio 2017でコードの動作検証、図版の追加、全般的な構成の変更などを行いました。
【2006/01/13】初版公開。
Copyright© Digital Advantage Corp. All Rights Reserved.