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

我本来是设想将进度保存在另一个文件内,下次从那个文件读取保存进度的东西,然后再按读取到的在第一个文件读取进度,但是总是出错,希望哪个大神能帮我一把

编代码这种事情需要你有思路,你既不给思路,也不给实现,要别人怎么回答?
-------------------------------------
我自己的思路:
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);

}追问

这个不能读取中文字符啊?假如我要的是个小说阅读器,可以自动保存进度,下次从进度继续阅读,该怎么实现啊?

追答

你提问中有说中文吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-09
百度 fopen sscanf fclose 等等 再不会就追问追问

就是它们的具体用法,我用p=ftell(fp)得到当前位置(p为long),然后将p用fprinf保存在另一个文件save里,下次用fscanf读取save(我用长整形的时候出错了),然后用fseek继续进度(若前面用fscanf的是char,这里就又出错了)希望能有个简单的例子代码,谢谢

追答

可以,我现在再上课,等我回寝室就发一段给你,或者你留个邮箱

追问

[email protected]谢啦~

本回答被提问者采纳
第2个回答  2013-03-09
这???如果是C#多好,各种简单
第3个回答  2013-03-09
真的是C语言吗 你要写DOS环境下的东西啊追问

就是c语言,读取txt文件

追答

fopen(文件路径,读取模式) 打开文件获得文件指针
fseek(文件指针,文件偏移,附加类型); //将读取的指针调整到指定偏移出
只要记住偏移下次再用这个偏移就可以了
不用
还有,tc 的文件指针的数据结构和Vc的文件指针的数据结构不同
你说下具体的环境把
我弄过类似的东西
我的做法效率低些
fseek(fp,fnp,SEEK_SET),fnc=fgetc(fp)自己在程序中建立偏移 fnp
不用他的刘结构,
还有可以根据file指针的数据结构,读取fp.xx(具体不一样忘了)数据项

追问

fnp是什么,什么类型的数据啊,我用的dev c++4.9.9.0,怎么记住偏移

追答

自己定义的变量,呵呵

相似回答