C# - Stream / FileStream EOF

时间:2011-02-16 12:27:07

标签: c# stream eof

是否有人知道如何找到你在文件的末尾? 我正在使用BinaryReader并尝试过PeekChar - 但它会引发异常。还有其他建议吗?

感谢。

5 个答案:

答案 0 :(得分:11)

Stream开始,如果您Read(buffer, offset, count),您将获得非阳性结果,如果您Peek(),您将获得否定结果。

使用BinaryReader时,the documentation表示PeekChar()应返回否定值:

  

返回值

     

类型:System.Int32   下一个可用字符,如果没有更多字符可用,则为-1,或者流不支持搜索。

你确定这不是损坏的流吗?即剩余的数据不能从给定的编码中形成完整的char

答案 1 :(得分:1)

如果您的流支持搜索(使用BaseStream.CanSeek属性检查),请检查BaseStream的Position属性,如下所示:

if (myBinaryReader.BaseStream.CanSeek){
   bool atEnd = (myBinaryReader.BaseStream.Position == myBinaryReader.BaseStream.Length - 1)
}

答案 2 :(得分:1)

检查阅读器的位置是否小于其长度就可以了?

While BinReader.Position < BinReader.Length
{
 ... BinReader.Read() ...
}

答案 3 :(得分:0)

我会添加我的建议:如果您不需要&#34;编码&#34; BinaryReader的一部分(因此您不能使用各种ReadChar / ReadChars / ReadString),那么您可以使用永不过时的编码器throw,这总是每字节一个字节。 Encoding.GetEncoding("iso-8859-1")非常适合这一点。 iso-8859-1编码是每字符一个字节的编码,它以1:1的方式映射Unicode的前256个字符(例如,byte 254是char 254 <) / p>

答案 4 :(得分:-1)

While BinReader.PeekChar() > 0
{
...
}