![](/img/trans.png)
[英]C#: Using StreamReader to read line from txt file, but Peek() return -1 even there are a lot of lines left
[英]StreamReader, C#, peek
我有一个StreamReader,偶尔会检查是否有更多要从简单的文本文件中读取。 它使用peek属性。 问题在于,当我使用peek时,位置会发生变化,而不是假设。
FileStream m_fsReader = new FileStream(
m_strDataFileName,
FileMode.OpenOrCreate,
FileAccess.Read,
FileShare.ReadWrite );
StreamReader m_SR = new StreamReader(m_fsReader);
Console.WriteLine("IfCanRead SR Position " + m_fsReader.Position +
" and Length " + m_fsReader.Length);
if (m_SR.Peek() == -1) {
Console.WriteLine("IfCanRead false 2 SR Position " +
m_fsReader.Position + " and Length " + m_fsReader.Length);
return false;
}
else {
Console.WriteLine("IfCanRead true 2 SR Position " +
m_fsReader.Position + " and Length " + m_fsReader.Length);
return true;
}
文档表明StreamReader的位置没有改变,但是你正在检查底层流的当前位置,而不是读取器本身的位置。 我没有看到它保证底层流的位置保持不变。 事实上,我怀疑它只是在内部读取它并缓冲,以便将读者的光标保持在前一个位置。 这意味着它不能保证底层流的位置不变。
Peek不会更改StreamReader对象的当前位置。 如果当前没有更多字符可用,则返回值为-1。
我自己测试了这个。 底层FileStream的位置已经改变,但关键是,这并不意味着StreamReader实际上已经消耗了任何字节。 所以没有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.