2.0以降で、ストリームを使わずに簡単に読み込むこの記事への評価、コメント文字コードを指定してテキストファイルを読み込むここでは、テキストファイルの内容を文字列として読み込む方法について説明します。Encodingオブジェクトを取得する方法については、「目的の文字コードに合ったEncodingオブジェクトを取得する」に移動しました。ストリームを使ってテキストファイルを読み込む最も基本的な方法は、StreamReaderクラスを使う方法です。以下にStreamReaderクラスを用いてテキストファイルの内容を読み込む簡単な例を示します。この例ではテキストファイル"C:\test\1.txt"をReadToEndメソッドですべて読み込んでいます。sr.ReadToEnd();//閉じるsr.Close();//結果を出力するConsole.WriteLine(s);StreamReaderは使用後にCloseメソッドを使って閉じる必要があります。通常は、usingステートメントやtry...finallyを使って確実にCloseメソッドが呼び出されるようにします。詳しくは、「Dispose、Closeが確実に呼び出されるようにする」をご覧ください。補足:StreamReaderはFileShare.Readとしてファイルを開きます。よって、StreamReaderで開いているファイルは、別のプロセス(あるいは自分のプロセス)からの読み込みは可能ですが、書き込みはできません。この設定を変更する方法は、「ファイルをロック(アクセスを制限)する」で紹介します。2.0以降のVB.NETでは、My.Computer.FileSystem.OpenTextFileReaderメソッドを使ってStreamReaderオブジェクトを作成することもできます。UTF-8で開くのであれば、File.OpenTextメソッドを使うこともできます。「Encoding.GetEncoding("shift_jis")」というのは、Shift-JISのエンコーディングを使用して文字列に変換しろという意味です。テキストファイルの文字コードがEUCであれば、"shift_jis"を"euc-jp"に変えます。JISであれば、"iso-2022-jp"にします。これについて詳しくは、「目的の文字コードに合ったEncodingオブジェクトを取得する」で説明します。この例のように3番目の引数(detectEncodingFromByteOrderMarksパラメータ)を省略すると、テキストファイルにBOMが付加していた時は、自動的に文字コードが判別されて、そのEncodingが使用されます。この時判別可能な文字コードは、UTF-8、UTF-16BE、UTF-16LE、UTF-32BE、UTF-32LEです。補足:BOMは、別の文字コードでは普通に文字として扱われる可能性もあります。よって、文字コードがはっきり分かっている場合は、detectEncodingFromByteOrderMarksをFalseにして、BOMによる自動判別をオフにした方がよいかもしれません。テキストファイルがUTF-8の場合は、Encodingの指定を省略できます。sr.ReadToEnd();//閉じるsr.Close();一行ずつ読み込む先の例では1度にすべて読み込みましたが、今度は一行ずつ読み込む例を示します。ReadLineメソッドで一行読み込み、Peekメソッドで末尾を確認します。ReadLineメソッドはファイルを最後まで読み込むとnull(VB.NETではNothing)を返しますので、これで末尾を判断することもできます。2.0以降では、StreamReader.EndOfStreamプロパティを使って末尾を確認することもできます。ReadLineメソッドが返す文字列には末尾の改行記号(キャリッジリターン、ラインフィード)が含まれませんので注意してください。Console.WriteLine(sr.ReadLine());}//閉じるsr.Close();一文字ずつ読み込むReadメソッドにより、一文字ずつ読み込むこともできます。Readメソッドは整数を返し、最後まで読み込むと-1を返します。この整数を文字に変換するには、Convert.ToCharメソッドなどを使用します。Console.Write(Convert.ToChar(sr.Read()));}//閉じるsr.Close();指定した文字数ずつ読み込むReadBlockメソッドを使って、指定した文字数だけ読み込むこともできます。ReadBlockメソッドは読み込んだ文字数を返し、ファイルの末尾に達していると、0を返します。10文字ずつ読み込む例を以下に示します。Console.Write(c);}//閉じるsr.Close();補足:ReadBlockメソッドとほぼ同じメソッドにStreamReader.Readメソッドがあります。両者の違いは、Readメソッドが、ファイルの末尾に到達しなかったとしても、ストリーム内に使用できるデータがなかった場合、指定された文字数よりも少ない文字しか読み込まない可能性があるのに対して、ReadBlockメソッドは指定された文字数が読み込まれるまでループする(ブロックする)ことで、必ず指定された文字数読み込まれるようにします。実際にStreamReader.Readメソッドが指定された文字数未満しか読み込まないことがあるのかは不明です。2.0からは、File.ReadAllTextメソッドやReadAllLinesメソッドにより、指定したファイルの中身を指定した文字コードですべて読み込むことができます。ReadAllTextはファイルの中身すべてをStringに読み込みます。ReadAllLinesも同じくすべてを読み込みますが、行で分割されたString配列に読み込みます。これらのメソッドは例外が発生しても確実にファイルを閉じるため、安心です。テキストファイルからすべての文字列を読み込むだけならば、StreamReader.ReadToEndメソッドよりも圧倒的に便利です。以下にReadAllTextとReadAllLinesメソッドを使った例を示します。2.0以降のVB.NETでは、My.Computer.FileSystem.ReadAllTextメソッドでFile.ReadAllTextと同じことができます。「一文字ずつ読み込む」「指定した文字数ずつ読み込む」を追加など。File.ReadAllTextとReadAllLinesメソッドに関する記述を追加。説明やコードの一部をより分かりやすいように書き換える。Encodingに関する説明を補充。Encodingオブジェクトを取得する方法を「目的の文字コードに合ったEncodingオブジェクトを取得する」に移動。detectEncodingFromByteOrderMarksパラメータに関する説明を追加。注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。Tipsをご利用いただく際は、注意事項をお守りください。共有するこの記事への評価この記事の評価を見る・評価するには、JavaScriptを有効にしてください。この記事へのコメントこの記事へのコメントの一覧を見るこの記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。設定JavaScriptを有効にしてください。