トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

ファイル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