| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 614 人关注过本帖
标题:[疑难杂镇]用二进制处理文件总大一字节,.....
取消只看楼主 加入收藏
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
 问题点数:0 回复次数:3 
[疑难杂镇]用二进制处理文件总大一字节,.....

我上网查了下资料说
用feof时,遇到结尾返回还是0,要再读入一字节(文件结束标志-1)才返回真
这个是我证实了的,确实如上

但奇怪的是,我按如下处理后,还是大一字节

#include <stdio.h>

int main()
{ FILE *sfp,*dfp;
long filesize,i=0;

if (sfp=fopen("d:/a.abc","rb"))
{ dfp=fopen("d: .abc","wb");
fseek(sfp,0L,SEEK_END);
filesize=ftell(sfp); /*单位字节*/
printf("文件大小: %ld 字节\n",filesize);
rewind(sfp);
puts("文件处理中....");
while(!feof(sfp))
{ if (i<filesize)
fputc(fgetc(sfp),dfp);
++i;
}
fclose(sfp);
fclose(dfp);
}
return 0;
}
而把条件改成

while(!feof(sfp))
{ if (i<filesize)
fputc(fgetc(sfp),dfp);
else
break;
++i;
}

结果又正确了,这是咋回事

搜索更多相关主题的帖子: 二进制 字节 疑难 sfp 
2007-03-04 09:27
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
得分:0 
while(i<filesize)
{
fputc(fgetc(sfp),dfp);
++i;
}
改成这样也对
但这样
while(!feof(sfp))
{ if (i<filesize)
fputc(fgetc(sfp),dfp);
++i;
}
结果就大一字节
2007-03-04 09:30
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
得分:0 
以下是引用I喜欢c在2007-3-4 13:34:56的发言:
就是执行与没执行 ++i 的关系嘛...

哪一个没执行++i呢?

2007-03-04 14:06
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
得分:0 
但filesize是一个定值呀
我的循环体内有判断呀
if (i<filesize)
//执行拷贝字符

这样按理说,即使不退出循环也不会多拷贝一个字节吧
2007-03-04 14:21
快速回复:[疑难杂镇]用二进制处理文件总大一字节,.....
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020363 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved