12,925
回編集
102行目: | 102行目: | ||
== テキストファイル == | == テキストファイル == | ||
==== テキストファイルの読み込みと書き込み ==== | ==== テキストファイルの読み込みと書き込み ==== | ||
<code>StreamReader</code>クラスを使用して、<br> | |||
テキストファイルの読み込みと書き込み、<code>using</code>構文によるファイルのクローズ、例外処理等を記載する。<br> | |||
<br> | <br> | ||
テキストファイルの内容を読み込むには、以下の3つの処理からなる。<br> | テキストファイルの内容を読み込むには、以下の3つの処理からなる。<br> | ||
# | # ファイルを開く | ||
# | # ファイルの内容を読み込む | ||
# | # ファイルを閉じる | ||
<br> | <br> | ||
==== テキストファイルを開く ==== | ==== テキストファイルを開く ==== | ||
ファイルを開くにはいくつかの方法が存在するが、UTF-8のファイルを開く場合、<br> | |||
<code>StreamReader</code>クラス(<code>System.IO</code>名前空間)を使用する。<br> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
StreamReader sr = new StreamReader(@"readme.txt", Encoding.UTF8); | StreamReader sr = new StreamReader(@"readme.txt", Encoding.UTF8); | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
また、Shift-JISのファイルを開く場合は、以下のように記述する。<br> | |||
< | <syntaxhighlight lang="c#"> | ||
StreamReader sr = new StreamReader(@"readme.txt", Encoding.GetEncoding("Shift_JIS")); | StreamReader sr = new StreamReader(@"readme.txt", Encoding.GetEncoding("Shift_JIS")); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== テキストファイルを読み込む ==== | ==== テキストファイルを読み込む ==== | ||
<code>StreamReader</code>クラスの<code>ReadToEnd</code>メソッドを使用して、テキストファイルの内容を一括して読み込むことができる。<br> | |||
また、<code>ReadToEnd</code>メソッドでは、改行文字等も含めて、全ての1つの文字列として読み込まれる。<br> | |||
<br> | <br> | ||
==== usingステートメントを使用してファイルを閉じる ==== | ==== usingステートメントを使用してファイルを閉じる ==== | ||
<code>StreamReader</code>クラスは、<code>IDisposable</code>インタフェースを実装しているため、(スーパークラスの<code>TextReader</code>クラスが実装している)<br> | |||
<code>Close</code>メソッドの代わりに、<code>using</code>ステートメントを利用することもできる。<br> | |||
<br> | |||
<u><code>using</code>ステートメントを抜ける時、自動的に<code>StreamReader</code>クラスの<code>Dispose</code>メソッドを呼び出して、</u><br> | |||
<u>その中で<code>Close</code>メソッドが呼び出される。</u><br> | |||
<br> | <br> | ||
==== ファイルが読み込めない時のエラー処理 ==== | ==== ファイルが読み込めない時のエラー処理 ==== | ||
ファイルが存在しない場合やファイルの読み込み中にディスク等に何らかの障害が発生する場合、<br> | |||
例外が発生してプログラムの実行が中断されるため、例外処理を記述する必要がある。<br> | |||
<br> | <br> | ||
==== | ==== テキストファイルの一括読み込み(変数の使用) ==== | ||
以下の例では、<code>ReadToEnd</code>メソッドを非同期処理に対応した<code>ReadToEndAsync</code>メソッドを使用して、<br> | |||
ファイルの全ての内容を一括して読み込んでいる。<br> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
using System; | using System; | ||
159行目: | 162行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== | ==== ファイルの内容を1行ずつ読み込む ==== | ||
ファイルの全ての内容を1つの変数に読み込むよりも、1行ずつ読み込んで文字列の配列に代入する方が扱いやすい場合がある。<br> | |||
<br> | |||
ファイルから1行読み込むには、<code>StreamReader</code>クラスの<code>ReadLine</code>メソッドを使用する。<br> | |||
<code>ReadLine</code>メソッドは、ファイルから1行のみ読み込み、内部で読み取り位置を1行分進める。<br> | |||
読み取り位置がファイルの末尾に達した場合、<code>null</code>を返す。<br> | |||
<br> | |||
なお、.NET Framework 2.0以降では、<code>File</code>クラス(<code>System.IO</code>名前空間)において、<br> | |||
ファイルを開く・内容を読み込む・ファイルを閉じるという一連の処理を1つのメソッドで行う<code>ReadAllText</code>メソッドと<code>ReadAllLines</code>メソッドが追加されている。<br> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
using System; | using System; | ||
194行目: | 201行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== テキストファイルの一括読み込み(変数の使用) ==== | |||
テキストファイルの全ての内容を1つの変数に読み込む場合、<code>File</code>クラスの<code>ReadAllText</code>メソッドを使用する。<br> | |||
<code>ReadAllText</code>メソッドで使用する標準の文字コードは、UTF-8である。<br> | |||
<br> | <br> | ||
以下の例では、テキストファイルの内容を一括して変数に読み込んでいる。<br> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
using System.Text; | using System.Text; | ||
215行目: | 220行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== テキストファイルの一括読み込み ==== | ==== テキストファイルの一括読み込み(配列の使用) ==== | ||
テキストを1行ずつ処理する場合、各行を要素とする文字列配列を使用する。<br> | テキストを1行ずつ処理する場合、各行を要素とする文字列配列を使用する。<br> | ||
これは、<code>System.IO.File</code>クラスの<code>ReadAllLines</code>メソッドを使用して実行する。<br> | これは、<code>System.IO.File</code>クラスの<code>ReadAllLines</code>メソッドを使用して実行する。<br> | ||
223行目: | 228行目: | ||
ファイル末尾に改行文字がある場合、<code>ReadAllLines</code>メソッドで得られる行数は1行少なくなる。<br> | ファイル末尾に改行文字がある場合、<code>ReadAllLines</code>メソッドで得られる行数は1行少なくなる。<br> | ||
<br> | <br> | ||
以下の例では、テキストファイルの内容を一括して配列に読み込んでいる。<br> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
using System.Text; | using System.Text; |