ReadAll系メソッド【C#】

概要

ReadAll系メソッド(ReadAllBytes/ReadAllLines/ReadAllText)は、1行でファイルを一気に読み込める大変便利なメソッドである。このメソッドの使用方法と簡単なサンプルを紹介。

ギャラリー

ReadAllText実行結果

ReadAllText実行結果

ReadAllLines実行結果

ReadAllLines実行結果

ReadAllBytes実行結果

ReadAllBytes実行結果

ReadAll〇〇について

プログラムにおいて、ファイルIOを行う事はよくあることです。

一般的な読み込みロジックとしては、以下のような手順になると思います。

  • ファイルをオープンする
  • EOFでないか判定、EOFでなければファイルをよみ、EOFならループをぬける
  • ファイルをクローズする

ただ、テストプログラムや数回しか使用しない簡単なツールでは、「もう少しチャチャッとやりたい。」と思う時も多いです。

C#では、そんな便利な物が提供されていました。Fileクラスにある以下のメソッドです。

ちなみに、これらはFileクラスのメソッドなので、使用する場合は「using System.IO」等の追加が必要です。

  • File.ReadAllText
  • File.ReadAllLines
  • File.ReadAllBytes

これらは、ファイルオープン/ファイル読み込み(全データ読み込み)/ファイルクローズを1行で行ってくれます。

無論、極端に大きいファイルの読み込みや読み込み中の細かい制御はできませんが、通常のファイル読み込みには十分対応できています。

使ってみると、本当に便利です。

簡単に仕様をまとめると、以下のようになります。

ReadAllText
機能
ファイルの内容をすべて読み込み、復帰値(string)に設定する。
構文
string data = File.ReadAllText(ファイルパス);
もしくは
string data = File.ReadAllText(ファイルパス,エンコード指定);
ReadAllText
機能
ファイルの内容をすべて読み込み、復帰値(string[])に設定する。復帰値はstring配列であることに注意。
構文
string[] data = File.ReadAllLines(ファイルパス);
もしくは
string[] data = File.ReadAllLines(ファイルパス,エンコード指定);
ReadAllBytes
機能
ファイルの内容をすべて読み込み、復帰値(byte[])に設定する。復帰値はbyte配列であることに注意。
なお、エンコード指定はないので、引数はファイルパスのみ。
構文
byte[] data = File.ReadAllBytes(ファイルパス);

実際のFile.ReadAllText使用方法(エンコード指定なし)

ソースコード

File.ReadAllTextのテスト用ソースコード。File.ReadAllTextでファイルの中身すべて読み込み、その内容を出力する。

Fileクラスを使用するので、ソースコードの最初に「using System.IO;」を追加している。

なお、読み込むデータのエンコードはデフォルト(UTF-8)を想定しているので、2番目のエンコード指定の引数は無い。

データファイル

秀丸で作成したUTF-8形式のデータファイル。「1234512345」と「ABCDEABCDE」の2行のファイル

コンパイル/実行結果

上記ソースコードをcscでコンパイルして実行する。

「type datafile.txt」でデータファイルの内容を表示しているが、内容が化けているのはファイルのエンコードがUTF-8のため

ReadAllText実行結果

実際のFile.ReadAllText使用方法(エンコード指定あり)

ソースコード

File.ReadAllTextのテスト用ソースコード。File.ReadAllTextでファイルの中身すべて読み込み、その内容を出力する。

Fileクラスを使用するので、ソースコードの最初に「using System.IO;」を追加している。

同様に、Encodingクラスを使用するので、ソースコードの最初に「using System.Text;」を追加している。

読み込むデータのエンコードはshift-jisを想定しているので、2番目のエンコード指定の引数で「Encoding.GetEncoding("shift_jis")」を指定している。

データファイル

秀丸で作成したshift_jis形式のデータファイル。「1234512345」と「ABCDEABCDE」の2行のファイル

コンパイル/実行結果

上記ソースコードをcscでコンパイルして実行する。

「type datafile.txt」でデータファイルの内容を表示しているが、ファイルのエンコードはshift-jisであるため文字化けは発生していない。

ReadAllText実行結果

実際のFile.ReadAllLines使用方法(エンコード指定なし)

ソースコード

File.ReadAllLinesのテスト用ソースコード。File.ReadAllLinesでファイルの中身すべて読み込み、その内容を出力する。

Fileクラスを使用するので、ソースコードの最初に「using System.IO;」を追加している。

なお、読み込むデータのエンコードはデフォルト(UTF-8)を想定しているので、2番目のエンコード指定の引数は無い。

データファイル

秀丸で作成したUTF-8形式のデータファイル。「1234512345」と「ABCDEABCDE」の2行のファイル

コンパイル/実行結果

上記ソースコードをcscでコンパイルして実行する。

「type datafile.txt」でデータファイルの内容を表示しているが、内容が化けているのはファイルのエンコードがUTF-8のため

ReadAllLines実行結果

実際のFile.ReadAllLines使用方法(エンコード指定あり)

ソースコード

File.ReadAllLinesのテスト用ソースコード。File.ReadAllLinesでファイルの中身すべて読み込み、その内容を出力する。

Fileクラスを使用するので、ソースコードの最初に「using System.IO;」を追加している。

同様に、Encodingクラスを使用するので、ソースコードの最初に「using System.Text;」を追加している。

読み込むデータのエンコードはshift-jisを想定しているので、2番目のエンコード指定の引数で「Encoding.GetEncoding("shift_jis")」を指定している。

データファイル

秀丸で作成したshift_jis形式のデータファイル。「1234512345」と「ABCDEABCDE」の2行のファイル

コンパイル/実行結果

上記ソースコードをcscでコンパイルして実行する。

「type datafile.txt」でデータファイルの内容を表示しているが、ファイルのエンコードはshift-jisであるため文字化けは発生していない。

ReadAllLines実行結果

実際のFile.ReadAllBytes使用方法

ソースコード

File.ReadAllLinesのテスト用ソースコード。File.ReadAllBytesでファイルの中身すべて読み込み、その内容を16進出力する。

Fileクラスを使用するので、ソースコードの最初に「using System.IO;」を追加している。

なお、ReadAllBytesにエンコード指定はないので引数は読み込みファイルのパスのみ。

データファイル

秀丸で作成したshift_jis形式のデータファイル。「1234512345」と「ABCDEABCDE」の2行のファイル

コンパイル/実行結果

上記ソースコードをcscでコンパイルして実行する。

「type datafile.txt」でデータファイルの内容を表示しているが、ファイルのエンコードはshift-jisであるため文字化けは発生していない。

ReadAllBytes実行結果

test.csにおいて、ファイルの内容は簡易16進数表示している。データファイルの文字「1」は16進「31」で表示されている。同様に全角文字「1」は16進の「82 50」で表示されている。

UTF-8形式のファイルの読み込み

シフトJISとは別にエンコード形式がUTF-8の場合の振る舞いも確認した。

「type datafile.txt」でデータファイルの内容を表示しているが、内容が化けているのはファイルのエンコードがUTF-8のため。

ReadAllBytes実行結果

test.csにおいて、ファイルの内容は簡易16進数表示している。データファイルの文字「1」は16進「31」で表示されている。同様に全角文字「1」は16進の「EF BC 91」で表示されている。これはUTF-8はシフトJISと異なり3バイトで構成されているためである。

なお、UTF-8で1文字を表すのに必要はバイト数は、1バイトから5バイトまでの幅を持つ。





 作成:2018/06/27 11:47:42  (作成
 更新:2018/06/28 12:45:21  (更新