- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{category 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