我有一个StreamReader,偶尔检查一下它是否有更多的内容要从简单的文本文件中读取。它使用的是窥视属性。问题是,当我使用窥视时,位置发生了变化,尽管这并不是我想要的。
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;
} 发布于 2009-11-15 14:22:38
文档表示StreamReader的位置没有改变,但您正在检查底层流的当前位置,而不是读取器本身的位置。我看不出它能保证底层流的位置保持不变。事实上,我怀疑它只是简单地读取它并在内部缓冲,以使读者的光标保持在前面的位置。这意味着它不能保证底层流的位置不变。
Peek不会更改StreamReader对象的当前位置。如果当前没有更多的字符可用,则返回的值为-1。
发布于 2009-11-15 14:17:21
我亲自测试过。底层FileStream的位置已经改变,但关键是,这并不意味着StreamReader实际上消耗了任何字节。所以没有问题。
https://stackoverflow.com/questions/1737591
复制相似问题