トップ 一覧 検索 ヘルプ RSS ログイン

ファイルIO.csの変更点

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