不要使用PeekChar()判断EOF

今天执行之前写的一个VS2005的.net中C#的读文件程序,以前好好的能运行的程序居然给我崩溃了。

错误信息为:输出字符缓冲区太小,无法包含解码后的字符,编码“Unicode (UTF-8)”的操作回退“System.Text.DecoderReplacementFallback”。

指向的代码为:

using(FileStream inputFile = newFileStream("name.bin",FileMode.Open))

using(BinaryReader br = new BinaryReader(inputFile))
{

//下面这个地方是一行,不清楚为什么CSDN显示分行了....

while(br.Peekchar() != -1)///<-----崩溃
     {
      ......
     }
}

查找后终于得出结论是:这是.NET的一个bug!

其中涉及到UTF编码格式的一些知识,我也不太明白,不过有一点是可以确定,官方推荐不要使用PeekChar()来判断EOF。这真是让我很郁闷啊,怎么那么多官方文档和SDK里面都用错误的例子啊,被误导了,耽误了不少时间呢。

推荐使用的判断EOF的方法是:

br.BaseStream.Position < br.BaseStream.Length

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值