はじめに
テキストファイルの読み込みですが、他の言語のJava、Objective-CやSwiftで同じような処理を行ったことがあるので、見当をつけて調べました。
StreamReaderクラス
StreamReaderクラスを使えば、テキストファイルを読み込めます。
読み込み方は3種類あります。
各Readメソッドを実行すると、文字読み込み位置が進みますので注意してください。
メソッド名 | 機能 |
---|---|
Read | 現在の文字読み込み位置から1字読み込みます、1文字分文字読み込み位置を進めます。終端に達すると-1が返却されます。 |
ReadLine | 現在の文字読み込み位置から1行読み込み、1行分文字読み込み位置を進めます。読み込んだ文字列に改行文字は含まれません。終端に達するとnullptrが返却されます。 |
ReadToEnd | 現在の文字読み込み位置から終端まで文字列を読み込みます。 |
void ReadTextFile(String^ path) { // finally節でCloseするため、StreamReaderの変数定義はtryブロックの外で行います。 StreamReader^ sr = nullptr; try { // StreamReaderを生成します。 // 今回はファイル名だけ指定して行います。この場合、文字エンコーディングはUTF8Encodingになります。 // その他の生成方法についてはAPI Referenceを参照してください。 sr = gcnew StreamReader(path); // ①1文字ずつ読み込みます。 int ch = -1; while ((ch = sr->Read()) != -1) { // 読み込んだ文字の処理 } // ②1行ずつ読み込みます。 String^ line = nullptr; while ((line = sr->ReadLine()) != nullptr) { // 読み込んだ文字列の処理 } // ③終端まで読み込みます。 String^ text = sr->ReadToEnd(); } catch (Exception^ e) { // 例外発生時の処理を記述します。 // 発生する例外ごとに処理したい場合は、それぞれの例外のcatch節を用意して処理してください。 } finally { // リソースを確実に開放するため、finally節でStreamReaderをクローズします。 if (sr != nullptr) { sr->Close(); } } }
API Reference
StreamReaderクラス
おわりに
予想通り他の言語と同じようなStreamReaderクラスが用意され、同じような読み込みメソッドが用意されていました。
ただ全部読み込めるReadToEnd()メソッドは、他の言語でみた記憶がありませんが、用途によっては便利だと感じました。
今回は単純にファイル名の指定だけでファイルをオープンしましたが、文字エンコーディングを指定したり、ファイルを排他/共有で開いたりする場合は、StreamReaderクラスのコンストラクタで指定できます。
この辺りはまたの機会に調べたいと思います。