c语言如何实现读取一个文件,读取完毕后将本次读取的进度保存下来,下次继续从这个进度开始读,详细代码

我本来是设想将进度保存在另一个文件内,下次从那个文件读取保存进度的东西,然后再按读取到的在第一个文件读取进度,但是总是出错,希望哪个大神能帮我一把... 我本来是设想将进度保存在另一个文件内,下次从那个文件读取保存进度的东西,然后再按读取到的在第一个文件读取进度,但是总是出错,希望哪个大神能帮我一把 展开
 我来答
MeChess
2013-03-09 · TA获得超过1538个赞
知道小有建树答主
回答量:448
采纳率:100%
帮助的人:577万
展开全部
编代码这种事情需要你有思路,你既不给思路,也不给实现,要别人怎么回答?
-------------------------------------
我自己的思路:
1、首先判断记录文件位置的(另一个文件)是否存在,不存在下面的数据文件从头开始读;
2、如果存在,则读取这个文件的内容(就是一个数字,代表文件相对位置);
3、打开要读的数据文件,通过fseek重置文件位置;
4、记录每次读取数据所偏移的指针相对位置;
5、将最后的这个相对位置写入记录文件(另一个文件)。
这里的第4步我是用指针相对位移实现的,其实我用返回值实现也可以,但是由于数据类型不同,还是以字节计算比较简单。

以上只是我的思路,实际上实现你要的功能思路有很多,不只这一种。
-------------------------------------
根据思路,我的实现如下:
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
FILE *fp_head,*fp,*fp_readPos;
int iFPos=0,iPos=0;
long ch='*';
/*打开要读的文件*/
fp_head=fp=fopen("c:\\FData.txt","r+") ;
/*打开记录读取进度的文件,如果没有表示从头开始读*/
if((fp_readPos=fopen("c:\\FPos.txt","r+"))==NULL)
iFPos=0;
else fscanf(fp_readPos,"%d",&iFPos);
fclose(fp_readPos);

printf("The initial relative pos:%d\n",iFPos);

fseek(fp,iFPos,SEEK_SET);
/*读两个变量试试*/
if((iPos=fscanf(fp,"%ld",&ch))!=EOF){
printf("%ld ",ch);
}

if((iPos=fscanf(fp,"%ld",&ch))!=EOF){
printf("%ld ",ch);
}

iFPos=ftell(fp);
printf("\nThe relative pos:%d",iFPos);
/*下面是将当前的文件指针相对位置写进第二个文件*/
fp_readPos=fopen("c:\\FPos.txt","w+");
fprintf(fp_readPos,"%d",iFPos);
fclose(fp_readPos);

/*关闭所读数据文件的文件句柄*/
fclose(fp);

}
追问
这个不能读取中文字符啊?假如我要的是个小说阅读器,可以自动保存进度,下次从进度继续阅读,该怎么实现啊?
追答
你提问中有说中文吗?
tyskfs
2013-03-09 · 超过15用户采纳过TA的回答
知道答主
回答量:129
采纳率:0%
帮助的人:50.1万
展开全部
百度 fopen sscanf fclose 等等 再不会就追问
更多追问追答
追问
就是它们的具体用法,我用p=ftell(fp)得到当前位置(p为long),然后将p用fprinf保存在另一个文件save里,下次用fscanf读取save(我用长整形的时候出错了),然后用fseek继续进度(若前面用fscanf的是char,这里就又出错了)希望能有个简单的例子代码,谢谢
追答
可以,我现在再上课,等我回寝室就发一段给你,或者你留个邮箱
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuxinyu100200
2013-03-09 · TA获得超过267个赞
知道小有建树答主
回答量:233
采纳率:75%
帮助的人:92.5万
展开全部
这???如果是C#多好,各种简单
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dawmoon
2013-03-09 · TA获得超过134个赞
知道小有建树答主
回答量:220
采纳率:0%
帮助的人:170万
展开全部
真的是C语言吗 你要写DOS环境下的东西啊
更多追问追答
追问
就是c语言,读取txt文件
追答
fopen(文件路径,读取模式) 打开文件获得文件指针
fseek(文件指针,文件偏移,附加类型); //将读取的指针调整到指定偏移出
只要记住偏移下次再用这个偏移就可以了
不用
还有,tc 的文件指针的数据结构和Vc的文件指针的数据结构不同
你说下具体的环境把
我弄过类似的东西
我的做法效率低些
fseek(fp,fnp,SEEK_SET),fnc=fgetc(fp)自己在程序中建立偏移 fnp
不用他的刘结构,
还有可以根据file指针的数据结构,读取fp.xx(具体不一样忘了)数据项
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式