有没有人熟悉一种方法来找出你在文件的末尾?我正在使用 BinaryReader 并尝试了 PeekChar - 但它引发了异常。还有其他建议吗?
谢谢。
从 aStream
中,如果你Read(buffer, offset, count)
得到一个非阳性结果,如果你Peek()
得到一个否定结果。
使用 a BinaryReader
,文档建议PeekChar()
应该返回负数:
返回值
类型:System.Int32 下一个可用字符,如果没有更多可用字符或流不支持查找,则为 -1。
你确定这不是一个损坏的流吗?即剩余的数据不能char
从给定的编码中形成一个完整的?
如果您的流支持搜索(使用 BaseStream.CanSeek 属性进行检查),请检查 BaseStream 的 Position 属性,如下所示:
if (myBinaryReader.BaseStream.CanSeek){
bool atEnd = (myBinaryReader.BaseStream.Position == myBinaryReader.BaseStream.Length - 1)
}
检查阅读器的位置是否小于其长度可以解决问题
While BinReader.Position < BinReader.Length
{
... BinReader.Read() ...
}
我将添加我的建议:如果您不需要“编码”部分BinaryReader
(因此您不使用各种ReadChar
// ReadChars
)ReadString
,那么您可以使用永远不会抛出的编码器,并且始终是一个-每字符字节。Encoding.GetEncoding("iso-8859-1")
非常适合这个。iso-8859-1
编码是每个字符一个字节的编码,它以 1:1 的比例映射 Unicode 的所有前 256 个字符(例如,254byte
就是char
254)
While BinReader.PeekChar() > 0
{
...
}