关于读取bin文件的问题

dicandicanfoxyz 2011-11-20 07:36:35
我现在要从bin文件读取数据,现在的做法是这样的:
if((temp = fgetc(fp))!=EOF)
{
DataBuffer[DataCount] = temp;
DataCount++;
}
else

break;

但是每次读取的数据只有一部分,是不是我的结束判断有问题?有这方面经验的朋友吗?
...全文
312 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小笨同学 2011-11-20
  • 打赏
  • 举报
回复
LZ还没解释为什么只读到一部份数据
dicandicanfoxyz 2011-11-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhykzhykzhyk 的回复:]
引用 3 楼 dicandicanfoxyz 的回复:

引用 2 楼 zhykzhykzhyk 的回复:
temp需要定义为int,你这么做了没有?如果char是有符号的,那么当读到0xFF的时候得到的值等于-1,这就是EOF的定义。


现在情况是我的文件太大了,用fgetc会不会效率太低啊!


用fgetc的效率损失主要在函数调用上,文件的缓存始终存在。
如果你的确在这……
[/Quote]
哦,明白了,呵呵!谢谢!
柯本 2011-11-20
  • 打赏
  • 举报
回复
查下你文件的打开方式,在windows下,二进制文件读打开要用"rb"
fp=fopen("xxx","rb");否则在文件中如果数据是0x1a的话,它就会返回EOF的
zhykzhykzhyk 2011-11-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dicandicanfoxyz 的回复:]

引用 2 楼 zhykzhykzhyk 的回复:
temp需要定义为int,你这么做了没有?如果char是有符号的,那么当读到0xFF的时候得到的值等于-1,这就是EOF的定义。


现在情况是我的文件太大了,用fgetc会不会效率太低啊!
[/Quote]

用fgetc的效率损失主要在函数调用上,文件的缓存始终存在。
如果你的确在这里遇到了效率问题,可以换用fread来读取整块。
dicandicanfoxyz 2011-11-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhykzhykzhyk 的回复:]
temp需要定义为int,你这么做了没有?如果char是有符号的,那么当读到0xFF的时候得到的值等于-1,这就是EOF的定义。
[/Quote]

现在情况是我的文件太大了,用fgetc会不会效率太低啊!
zhykzhykzhyk 2011-11-20
  • 打赏
  • 举报
回复
temp需要定义为int,你这么做了没有?如果char是有符号的,那么当读到0xFF的时候得到的值等于-1,这就是EOF的定义。
小笨同学 2011-11-20
  • 打赏
  • 举报
回复
如果是二进制文件的话,有可能提前遇到EOF(-1),尝试用feof()试试

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧