プロが教えるわが家の防犯対策術!

ファイルをオープンしたまま、ファイル内のデータを何度も読み込みたいのですが、Seekで読み込み位置を先頭にし、Peekでループさせ、一度全部読み込み終わった後、Seek文で先頭に戻し、再度ファイルの先頭から読み込ませようと思ったのですができません。
なぜなのでしょうか?

// ファイルオープン
StreamReader sr = new StreamReader(
(System.IO.Stream) File.OpenRead("C:\\Temp\\Test.txt"),
System.Text.Encoding.ASCII);

// 最後まで読み出す
sr.BaseStream.Seek(0, SeekOrigin.Begin);
while (sr.Peek() > -1) {
Console.WriteLine(sr.ReadLine());
}
// もう一度
sr.BaseStream.Seek(0, SeekOrigin.Begin);
while (sr.Peek() > -1) {         ←このWhileの中に入らない。
Console.WriteLine(sr.ReadLine());
}

// ファイルクローズ
sr.Close();

A 回答 (1件)

まず、ソースの書き方からVB.NETではなくてC#.NETだと思います。



ファイルを最後まで読み出すと、ストリームの状態がEOF状態になり、この状態をリセットしないとストリームから読み出せません。
Cでなら、clearerr関数でEOFをクリアできるのですが、.NetFrameworkではそれに該当する関数はありません。
なので
EOFになってしまったら
いったん、Closeして再度オープンしないとしょうがないと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!