小编Col*_*ull的帖子

TextReader.Peek行为和检测流/阅读器的结束

当我使用文本阅读器时,检测到我实际上在数据末尾的最佳方法是什么?通常的方法做,这是什么的下面,

    while(reader.Peek() != -1)
    {
       ///do stuff
    }
Run Code Online (Sandbox Code Playgroud)

但是这里的msdn文档说明如下

表示要读取的下一个字符的整数,如果没有更多字符可用或读者不支持搜索,则返回-1.

所以我的问题是你怎么知道你是否真的在读者数据的末尾,或者读者/底层流不支持寻求,因为这里的返回值似乎含糊不清?如果我有以下内容

    public void Parse(TextReader reader)
    {
         while(reader.Peek() != -1) //am I really at the end
         {
            //do stuff
         }
    }

    Parse(new StreamReader(new NetworkStream(....)));
Run Code Online (Sandbox Code Playgroud)

因为网络流不支持寻求.

还是我错过了什么?

编辑:

为了澄清,我可以使用更具体的StreamReader类轻松实现这一点,因为我可以检查EoS.但是为了保持一般性,我想使用TextReader,所以我不仅仅与StreamReader绑定.然而,Peek的语义似乎有点奇怪,为什么它不仅仅是在寻求不支持的情况下抛出,为此为什么没有TextReader的EoF属性?

.net c# textreader

8
推荐指数
2
解决办法
7661
查看次数

标签 统计

.net ×1

c# ×1

textreader ×1