| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 359 人关注过本帖
标题:请教文件操作的问题
只看楼主 加入收藏
MHVLZ
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-3-22
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:3 
请教文件操作的问题
我使用fread读取文件内容,fread(a,sizeof(a),1,fp);,之后我想退回读取前的位置,就使用fseek(fp,-1*(long)(sizeof(a)),SEEK_CUR);,后来发现读取文件有问题,之后我使用ftell发现,除了第一次读取之后退回,之后所有的读取退回的操作,都无法退回原点。
比如
程序代码:
printf("%ld\n",ftell(fp));
fread(a,sizeof(a),1,fp);
printf("%ld\n",ftell(fp));
fseek(fp,-1*(long)(sizeof(a)),SEEK_CUR);
printf("%ld\n",ftell(fp));
fread(b,sizeof(b),1,fp);
printf("%ld\n",ftell(fp));
fseek(fp,-1*(long)(sizeof(b)),SEEK_CUR);
printf("%ld\n",ftell(fp));
fread(c,sizeof(c),1,fp);
printf("%ld\n",ftell(fp));
fseek(fp,-1*(long)(sizeof(c)),SEEK_CUR);

整个过程就是读取a,退回a那么大的距离,读取b,退回b那么大的距离,读取c,退回c那么大的距离,之后循环操作。
但是ftell告诉我,它却是这么操作的:
开始-位置0;
读取a-位置7;
退回-位置0;
读取b-位置9;
退回-位置1;
读取c-位置11;
退回-位置2
………………………………之后循环后,就连读取a,都无法退回原位置了,位置就是0、1、2、3、4、5………………

唔…………为什么啊,怎么弄啊?
2011-08-28 16:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
你懂用ftell查位置,很好,那么为什么不顺便查每次sizeof()是多少呢?
为什么不每次用SEEK_SET来定位而要用SEEK_CUR呢?
SEEK_CUR到底是坐标轴上的什么位置?

授人以渔,不授人以鱼。
2011-08-28 17:18
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:10 
正如2楼所说,问题就是出在sizeof()上,我给楼主个可以解决问题的建议吧,fread每次会返回一个整型值表示读入的字节数,你用一个整型数
将fread的返回值赋给这个整型值,然后在调用fseek里的第二个参数时使用这个整型值,如果不出意外,应该能得到正确的结果,楼主可以试下。

天道酬勤!
2011-08-28 17:26
MHVLZ
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-3-22
收藏
得分:0 
我换了一个方法写的,总感觉文件内部的位置移动很乱…………
2011-08-30 14:46
快速回复:请教文件操作的问题
数据加载中...
 
   



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

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