我正在尝试一次以几行的块读取一个(小型)文件,并且我需要返回到特定块的开头。
问题是,在第一次调用
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)))
{...}
有什么建议么?