StreamReader,C#,peek

StreamReader,C#,peek,c#,streamreader,.net,peek,C#,Streamreader,.net,Peek,我有一个StreamReader,它可以偶尔检查一个简单的文本文件是否有更多的内容需要读取。它使用peek属性。问题是,当我使用peek时,位置发生了变化,尽管我不想这样做 FileStream m_fsReader = new FileStream( m_strDataFileName, FileMode.OpenOrCreate, FileAcces

我有一个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;
}  

我自己测试了一下。底层FileStream的位置已更改,但关键点是,这并不意味着StreamReader实际消耗了任何字节。因此没有问题。

指示StreamReader的位置没有更改,但您正在检查底层流的当前位置,而不是读卡器本身的位置。我不认为它能保证底层流的位置保持不变。事实上,我怀疑它只是简单地读取它并在内部进行缓冲,以使读卡器的光标保持在前面的位置。这意味着它不能保证底层流的位置不变

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


发布相关代码,因为Peek不消耗任何字节。这就是Peek的重点。我假设您知道File.ReadAllBytes和其他类似方法,但它们不能在您的特定程序中使用……不,我正在检查StreamReader处理程序。您的代码显示您正在打印流的位置,而不是流读取器。我知道您正在调用阅读器上的Peek,但您似乎认为它将流保留在相同的位置,但文档仅说明它将保持阅读器的位置不变。我将进行编辑,以便您可以删除错误的否决票。+1。你精心设计的答案不应该得负分。+1-真遗憾你投了反对票,而实际上你的答案是“砰”的一声money@Roman--对不正确的答案投反对票是完全合理的,我能理解你怎么会认为我的答案不适用。这就是为什么我评论和编辑,给你一个机会撤销你的投票。没有怨恨。我不知道你到底为什么要否决那些试图帮助你的人。