C#でテキストファイルを読み込むには System.IO.StreamReader クラスを使います。
ここでは基本的な StreamReader クラスの使い方についてまとめてみます。
ファイルを開く
StreamReaderオブジェクトを生成すると、ファイルがオープンされて内容を読み込める状態になります。
読み込みたいファイルの名前はコンストラクタの引数に渡します。
ファイルの文字エンコーディングも合わせてコンストラクタの引数に渡しましょう。
※文字コード
テキストファイルに書かれる文字は文字コードと呼ばれるバイト表現と文字の対応表を使って保存されています。
保存時に使った文字コードと同じ文字コードで解釈して読み込まなければ漢字などが正しく読み込めない事があります。
var fileName = @"c:\test.txt"; var encoding = System.Text.Encoding.GetEncoding("SHIFT_JIS"); var reader = new System.IO.StreamReader(fileName, encoding);
ファイルを読む
StreamReader クラスの ReadLine() メソッドを使うと1行ずつ読み込んでいくことが出来ます。
ファイルの終わりに達したかどうかは EndOfStream プロパティで確認出来るので、EndOfStream が true になるまでループしてあげる事でファイルの最後まで読み込む事ができます。
var fileName = @"c:\test.txt"; var encoding = System.Text.Encoding.GetEncoding("SHIFT_JIS"); var reader = new System.IO.StreamReader(fileName, encoding); while (!reader.EndOfStream) { var record = reader.ReadLine(); //読み込んだ行にたいする処理 }
ファイルを閉じる
ファイルは開いたら必ず閉じる必要があります。
ファイルを閉じるには StreamReader クラスの Close() メソッドを呼び出します。
Close は finally で
ファイルの読み込み中に例外が発生する可能性がある事を必ず考慮してコードを書きましょう。
try ... finally ステートメントの finally ブロックで Close() を呼び出す事で例外発生時にも対応したコードを書くことが出来ます。
var fileName = @"c:\test.txt"; var encoding = System.Text.Encoding.GetEncoding("SHIFT_JIS"); var reader = new System.IO.StreamReader(fileName, encoding); try { while (!reader.EndOfStream) { var record = reader.ReadLine(); //読み込んだ行にたいする処理 } } finally { reader.Close(); }
Close の代わりに using を使う
StreamReader クラスは IDisposable インターフェースをもっているので、Close() メソッドのかわりに using 構文を使う事も出来ます。
下記の例は、上の try … finally を使ったコードと全く同じ動きをします。
using ブロックを抜けた時点で(例外が起きる起きないにかかわらず)IDispposableインターフェースの Dispose() メソッドが呼ばれます。この Dispose() でファイルを閉じる処理が行われます。
var fileName = @"c:\test.txt"; var encoding = System.Text.Encoding.GetEncoding("SHIFT_JIS"); using (var reader = new System.IO.StreamReader(fileName, encoding)) { while (!reader.EndOfStream) { var record = reader.ReadLine(); //読み込んだ行にたいする処理 } }
関連記事
- C#の値型と参照型の違い
- C#のコンストラクタでオーバーロード
- C#のコンストラクタの継承
- C#のジェネリックを使おう
- C#のデリゲート (delegate) って何?
- C#のデリゲートお手軽にする匿名メソッド
- C#のラムダ式【=>】って何?
- C#で基底クラスのメソッドを置き換えるオーバーライド
- C#でキャストとas演算子を使いこなす
- C#で型を判別するtypeofとis演算子
- C#の値型でもnullを扱えるようにするNullable
- C#のリソース解放にはIDisposableとusingを使おう
- C#のStringとstring、Int32とint 違いは・・・ない!
- C#でasync/awaitを使った非同期処理
- C#で文字列を指定の区切り文字で分割
- C#のstring.Formatで桁数や書式を指定する
- C#の配列やListをソートする
- C#の配列やListを検索する (Find,FindAll,FindIndex)
- C#の配列やListを高速に検索する (BinarySearch)
- C#の配列の中に指定の要素が存在するかを調べる(LINQ Contains)
- C#の配列の中に条件を満たす要素が存在するかを調べる(LINQ Any)
- C#の配列から条件に合う要素を抽出する(LINQ Where)
- C#の配列で要素毎の処理結果を得る(LINQ Select)
- C#の配列を並び替える(LINQ OrderBy,ThenBy)
- C#の配列をグループ毎に処理する(LINQ GroupBy)
- C#の配列を内部結合(INNER JOIN)する(LINQ Join)
- C#の配列から最初の要素を取り出す(LINQ First,FirstOrDefault)
- C#の配列の重複要素を削除する(LINQ Distinct)
- C#でフォルダ内のファイル名一覧を取得する
- C#でテキストファイルを読み込む
- C#でテキストファイルに書き込む
- C#でバイナリファイルを読み込む
- C#でバイナリファイルに書き込む
コメントをお書きください