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