「C Sharpの基礎 - ファイル」の版間の差分

ナビゲーションに移動 検索に移動
102行目: 102行目:
== テキストファイル ==
== テキストファイル ==
==== テキストファイルの読み込みと書き込み ====
==== テキストファイルの読み込みと書き込み ====
StreamReaderクラスを使用したテキストファイルの読み込み、using構文によるファイルのクローズ、例外処理など、<br>
<code>StreamReader</code>クラスを使用して、<br>
.NET Frameworkにおけるテキストファイルの読み込みの基本を解説する。<br>
テキストファイルの読み込みと書き込み、<code>using</code>構文によるファイルのクローズ、例外処理等を記載する。<br>
<br>
<br>
テキストファイルの内容を読み込むには、以下の3つの処理からなる。<br>
テキストファイルの内容を読み込むには、以下の3つの処理からなる。<br>
# '''ファイルを開く'''
# ファイルを開く
# '''ファイルの内容を読み込む'''
# ファイルの内容を読み込む
# '''ファイルを閉じる'''
# ファイルを閉じる
<br>
<br>
==== テキストファイルを開く ====
==== テキストファイルを開く ====
ファイルを開くには幾つかの記述方法があるが、UTF-8のファイルをファイル名を指定して開くには、<br>
ファイルを開くにはいくつかの方法が存在するが、UTF-8のファイルを開く場合、<br>
StreamReaderクラス(System.IO名前空間)を次のようにして使用するのが最も簡便である。<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);
  </source>
  </syntaxhighlight>
<br>
<br>
また、Windowsで最も一般的に使用されているShift-JISのファイルを開くには次のようにする。<br>
また、Shift-JISのファイルを開く場合は、以下のように記述する。<br>
  <source lang="c#">
  <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>
==== テキストファイルを読み込む ====
==== テキストファイルを読み込む ====
StreamReaderクラスのReadToEndメソッドを使用することで、ファイルの内容を全て1つの文字列に読み込むことができる。<br>
<code>StreamReader</code>クラスの<code>ReadToEnd</code>メソッドを使用して、テキストファイルの内容を一括して読み込むことができる。<br>
ReadToEndメソッドでは、改行文字等も含めて全ての1つの文字列として読み込まれる。<br>
また、<code>ReadToEnd</code>メソッドでは、改行文字等も含めて、全ての1つの文字列として読み込まれる。<br>
<br>
<br>
==== usingステートメントを使用してファイルを閉じる ====
==== usingステートメントを使用してファイルを閉じる ====
StreamReaderクラスはIDisposableインタフェースを実装しているため(スーパークラスのTextReaderクラスが実装している)<br>
<code>StreamReader</code>クラスは、<code>IDisposable</code>インタフェースを実装しているため、(スーパークラスの<code>TextReader</code>クラスが実装している)<br>
Closeメソッドの代わりにusingステートメントを利用することも出来る。<br>
<code>Close</code>メソッドの代わりに、<code>using</code>ステートメントを利用することもできる。<br>
usingステートメントの実行を終えた時、自動的にStreamReaderクラスのDisposeメソッドを呼び出して、<br>
<br>
その中でCloseメソッドが呼び出される。<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>
<br>
<br>
==== サンプルコード(ファイルの内容を全て1つの文字列に読み込む) ====
==== テキストファイルの一括読み込み(変数の使用) ====
以下の例では、<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つの文字列として読み込むよりも、1行ずつ読み込んで文字列の配列にした方が扱いやすい場合がある。<br>
ファイルの全ての内容を1つの変数に読み込むよりも、1行ずつ読み込んで文字列の配列に代入する方が扱いやすい場合がある。<br>
ファイルから1行読み込むには、ReadLineメソッドを使用する。<br>
<br>
ReadLineメソッドは、StreamReaderクラスにより開いたファイルから1行だけ読み取り、内部の読み取り位置を1行分進める。<br>
ファイルから1行読み込むには、<code>StreamReader</code>クラスの<code>ReadLine</code>メソッドを使用する。<br>
読み取り位置がファイルの最後に達した場合はnullを返す。<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>
尚、.NET Framework 2.0以降ではファイルを開き、内容を読み込み、閉じるという一連の処理を1つのメソッドで出来るReadAllTextメソッドと<br>
==== テキストファイルの一括読み込み(変数の使用) ====
ReadAllLinesメソッドがFileクラス(System.IO名前空間)に追加されている。<br>
テキストファイルの全ての内容を1つの変数に読み込む場合、<code>File</code>クラスの<code>ReadAllText</code>メソッドを使用する。<br>
<code>ReadAllText</code>メソッドで使用する標準の文字コードは、UTF-8である。<br>
<br>
<br>
==== サンプルコード(File.ReadAllTextメソッドによる文字列への読み込み) ====
以下の例では、テキストファイルの内容を一括して変数に読み込んでいる。<br>
テキストファイル全体を1つの文字列に読み込む場合は、FileクラスのReadAllTextメソッドが利用できる。<br>
ReadAllTextメソッドで使用するデフォルトの文字コードは、UTF-8である。<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>
以下の例では、テキストファイルの内容を一括して配列に読み込んでいる。<br>
  <syntaxhighlight lang="c#">
  <syntaxhighlight lang="c#">
  using System.Text;
  using System.Text;

案内メニュー