StreamReader,C#,偷看

Bor*_*kov 2 .net c# streamreader 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;
}  
Run Code Online (Sandbox Code Playgroud)

tva*_*son 13

该文件指出的StreamReader的位置没有改变,但要检查的基础流的当前位置,而不是读者本身.我没有看到它保证底层流的位置保持不变.事实上,我怀疑它只是在内部读取它并缓冲,以便将读者的光标保持在前一个位置.这意味着它不能保证底层流的位置不变.

Peek不会更改StreamReader对象的当前位置.如果当前没有更多字符可用,则返回值为-1.


Wim*_*dse 6

我自己测试了这个.底层FileStream的位置已经改变,但关键是,这并不意味着StreamReader实际上已经消耗了任何字节.所以没有问题.

  • 为什么在地球上你会贬低那些试图帮助你的人,我不知道. (3认同)