首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StreamReader,C#,peek

StreamReader,C#,peek
EN

Stack Overflow用户
提问于 2009-11-15 14:02:47
回答 2查看 5.8K关注 0票数 4

我有一个StreamReader,偶尔检查一下它是否有更多的内容要从简单的文本文件中读取。它使用的是窥视属性。问题是,当我使用窥视时,位置发生了变化,尽管这并不是我想要的。

代码语言:javascript
复制
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;
}  
EN

回答 2

Stack Overflow用户

发布于 2009-11-15 14:22:38

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

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

票数 13
EN

Stack Overflow用户

发布于 2009-11-15 14:17:21

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1737591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档