我有一个文本文件,我想逐行读取并记录文本文件中的位置.在读取文件的任何行后,程序可以退出,我需要在恢复时在下一行继续读取该文件.
以下是一些示例代码:
using (FileStream fileStream = new FileStream("Sample.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fileStream.Seek(GetLastPositionInFile(), SeekOrigin.Begin);
using (StreamReader streamReader = new StreamReader(fileStream))
{
while (!streamReader.EndOfStream)
{
string line = streamReader.ReadLine();
DoSomethingInteresting(line);
SaveLastPositionInFile(fileStream.Position);
if (CheckSomeCondition())
{
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这段代码时,fileStream.Position读取每一行后,它的值不会改变,只有在读完几行后才会前进.当它发生变化时,它会以1024的倍数增加.现在我假设有一些缓冲正在进行,但我怎样才能记录文件中的确切位置?
Jon*_*eet 10
这不是FileStream负责任的 - 这是StreamReader.为了提高效率,它一次读取1K.
尽可能地跟踪流的有效位置StreamReader是棘手的...特别是因为ReadLine将丢弃行结束,所以你不能准确地重建原始数据(它可能以"\n"或"\r \n"个).如果StreamReader暴露一些东西以使这更容易(我很确定它可以这样做没有太多困难)会很好但我不认为当前的API中有任何东西可以帮助你:(
顺便说一句,我建议EndOfStream你不要使用,而是继续阅读,直到ReadLine返回null.这让我感觉更简单:
string line;
while ((line = reader.ReadLine()) != null)
{
// Process the line
}
Run Code Online (Sandbox Code Playgroud)