C#-流/文件流EOF

C#-流/文件流EOF,c#,stream,eof,C#,Stream,Eof,有人知道你在文件末尾吗? 我正在使用BinaryReader并尝试PeekChar,但它引发了一个异常。还有其他建议吗 谢谢。从流中,如果读取(缓冲区、偏移量、计数)将得到一个非正结果,如果Peek()将得到一个负结果 使用二进制读取器,建议PeekChar()应返回负数: 返回值 类型:System.Int32 下一个可用字符,如果没有更多可用字符或流不支持查找,则为-1 你确定这不是一个损坏的流吗?i、 e.剩余的数据不能从给定的编码中形成完整的字符如果您的流支持查找(使用BaseStrea

有人知道你在文件末尾吗? 我正在使用BinaryReader并尝试PeekChar,但它引发了一个异常。还有其他建议吗


谢谢。

中,如果
读取(缓冲区、偏移量、计数)
将得到一个非正结果,如果
Peek()
将得到一个负结果

使用
二进制读取器
,建议
PeekChar()
应返回负数:

返回值 类型:System.Int32 下一个可用字符,如果没有更多可用字符或流不支持查找,则为-1


你确定这不是一个损坏的流吗?i、 e.剩余的数据不能从给定的编码中形成完整的
字符

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

While BinReader.PeekChar() > 0
{
...
}
if (myBinaryReader.BaseStream.CanSeek){
   bool atEnd = (myBinaryReader.BaseStream.Position == myBinaryReader.BaseStream.Length - 1)
}

我将补充我的建议:如果您不需要
二进制读取器的“编码”部分(因此您不使用各种
ReadChar
/
ReadChars
/
/
ReadString
),那么您可以使用一个永远不会抛出并且始终是每个字符一个字节的编码器<代码>编码。GetEncoding(“iso-8859-1”)
非常适合于此。
iso-8859-1
编码是每个字符一个字节的编码,它将Unicode的所有前256个字符映射为1:1(因此
字节
254就是
字符
254)

检查读卡器的位置是否小于其长度会起作用

While BinReader.Position < BinReader.Length
{
 ... BinReader.Read() ...
}
而BinReader.Position
您希望它仅适用于文件(我认为是可查找的),还是适用于一般的流?它会引发什么异常?输出字符缓冲区太小,无法包含解码字符,编码为“Unicode(UTF-8)”fallback“System.Text.DecoderReplacementFallback”。参数名称:chari've done while(binReader.peek char()!=-1){…}这是我得到的结果:输出字符缓冲区太小,无法包含解码字符,编码为“Unicode(UTF-8)”fallback“System.Text.decodereplacementfallback”。参数名称:chars@MarcGravell
DecoderReplacementFallback
中可能有一个bug/功能,因此
新的二进制读取器(新的MemoryStream(新字节[]{194,0,0})).PeekChar()
会抛出一个异常(不是所有三个字节的非法序列都会抛出……例如
{192,0,0}
不会使用
Stream.Position
Stream.Length
将导致异常,如果
CanSeek==false