利用C语言替换文件中某一行的方法
文件中存贮的内容如下所示:
11112201122**00 222220222**00 333330333**00
通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell。
具体的函数函数原型如下所示:
FILE*fopen(constchar*filename,constchar*mode); intfprintf(FILE*stream,constchar*format,...) intfscanf(FILE*stream,constchar*format,...) intfseek(FILE*stream,longoffset,intorigin) longftell(FILE*stream)
首先,数据写入到文件中的是追加的形式。
具体的写入代码如下所示:
主要写入时要指定每个数据的宽度,若不指定,当修改某行的数据,修改后的长度大于修改前得长度,将影响文件中的下一行。制定宽度之后,只要修改后的长度不大于制定的宽度,都不影响下面的内容。(这是注意点)
FILE*fp=fopen("clientinfo.txt","ar+");
Clientinfoinfo;
memset(&info,0,sizeof(Clientinfo));
。。。。
。。。。/*完成对info结构体的赋值*/
fprintf(fp,"%10s%10s%10d%10s%10s%10s%10d%10d",info.id,info.nickname,\
info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);
fprintf(fp,"\n");
fclose(fp);
修改处的代码如下所示,整个代码是我在MFC中实现的:
FILE*fp=fopen("clientinfo.txt","r+");
Clientinfoinfo;
longnline=0,n;
memset(&info,0,sizeof(Clientinfo));
intoldline=0;/*记录匹配位置的前一行的偏移量*/
CStringstr;
while((n=fscanf(fp,"%s%s%d%s%s%s%d%d",info.id,info.nickname,\
&info.online,info.pwd,info.encryp,info.ip,&info.port,&info.fd))!=EOF)
{
str.Format("%d",nline);
MessageBox(str);
if(strncmp(info.id,id,id.GetLength())==0)/*查找要修改的位置*/
{
oldline=nline;
break;
}
nline=ftell(fp);
}
fseek(fp,oldline,SEEK_SET);/*定位到要修改的位置,注意,这个位置是上一次读的最后,故写的时候要先写换行,第一行除外*/
if(oldline!=0)
{
fprintf(fp,"\n");
}
fprintf(fp,"%10s%10s%10d%10s%10s%10s%10d%10d",info.id,info.nickname,\
info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);
fprintf(fp,"\n");
fclose(fp);
下面是修改后的数据,修改第二行,没有影响前后的数据。
11112201122**00 22222f0222f**00 333330333**00
总结
利用C语言替换文件中某一行的方法到这就基本结束了,大家都学会了吗?希望这篇文章的内容对大家的学习和工作能带来一定的帮助,如果有疑问,大家可以留言交流。