一度に数行のチャンクで(小さい)ファイルを読み取ろうとしていますが、特定のチャンクの先頭に戻る必要があります。
問題は、最初の呼び出しの後です
streamReader.ReadLine();
streamReader.BaseStream.Position
プロパティはファイルの最後に設定されています! バックステージでキャッシングが行われていると仮定しますが、このプロパティには、そのファイルから使用したバイト数が反映されると予想していました。はい、ファイルには複数の行があります:-)
たとえば、ReadLine()
再度呼び出すと、ファイル内の次の行が (自然に) 返されます。これは、以前に によって報告された位置から開始されませんstreamReader.BaseStream.Position
。
最初の行が終了する実際の位置を見つけて、後でそこに戻るにはどうすればよいですか?
ReadLine() によって返される文字列の長さを追加することによって、手動で簿記を行うことしか考えられませんが、ここでもいくつかの注意事項があります。
- ReadLine() は、可変長の改行文字を取り除きます ('\n' ですか? "\r\n" ですか? など)。
- これが可変長文字でうまくいくかどうかはわかりません
...だから今、私の唯一の選択肢は、ファイルの解析方法を再考することだと思われるので、巻き戻す必要はありません。
それが役立つ場合は、次のようにファイルを開きます。
using (var reader = new StreamReader(
new FileStream(
m_path,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite)))
{...}
助言がありますか?