ファイルIO.cs
[C#]
FileStreamはバイナリのストリーム。
これをテキストとして読むには、StreamReaderでラップする。
「テキストとして読む」とは、要するに、いろいろ便利なメソッドを付け加える、ということ。ラインストリームとして扱うとか。
using System.IO; class FSReader { FileStream fs = null; StreamReader sr = null; try { fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); sr = new StreamReader(fs); string eachLine; while ((eachLine = sr.ReadLine()) != null) { // doing something... } } catch (Exception e) { Console.WriteLine(e); } finally { if (sr != null) { sr.Close(); } } }
StreamReaderの第二引数にEncodingオブジェクト(System.Text名前空間)を指定して、特定の文字コードに限定することができる。
System.IO.Fileクラスのスタティック・メソッドであるOpenも、FileStreamオブジェクトを返すことができるので、
FileStream ofs = File.Open(filePath, FileMode.Open, FileAccess.Read);
とできるが、new FileStream()の方が、ファイルストリームを作っていることが明確で良くない?
余談:
ReadLine()のループだが、以下のように書くことができる。
for (string eachLine; (eachLine = sr.ReadLine()) != null;) { // doing something; }
こうすると、一時変数eachLineのスコープを限定できる。
余談2:
for (string eachLine; sr.EndOfStream == false;) { eachLine = sr.ReadLine(); // do someting; }
余談3:
StreamReader sr = new StreamReader(filePathString);
これでいいらしい。。。orz