服务器之家

服务器之家 > 正文

利用C语言替换文件中某一行的方法

时间:2021-04-16 14:39     来源/作者:jfkidear

文件中存贮的内容如下所示:

?
1
2
3
11    1122     0    1122     *     *     0     0
22    222     0    222     *     *     0     0
33    333     0    333     *     *     0     0

通过使用下面的几个函数,fopenfprintffscanffseekftell

具体的函数函数原型如下所示:

?
1
2
3
4
5
FILE*fopen(const char*filename,const char *mode);
int fprintf(FILE*stream,const char *format,...)
int fscanf(FILE* stream,const char *format,...)
int fseek(FILE*stream,long offset,int origin)
long ftell(FILE* stream)

首先,数据写入到文件中的是追加的形式。

具体的写入代码如下所示:

主要写入时要指定每个数据的宽度,若不指定,当修改某行的数据,修改后的长度大于修改前得长度,将影响文件中的下一行。制定宽度之后,只要修改后的长度不大于制定的宽度,都不影响下面的内容。(这是注意点)

?
1
2
3
4
5
6
7
8
9
FILE *fp=fopen("clientinfo.txt","ar+");
Clientinfo info;
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中实现的: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
FILE *fp=fopen("clientinfo.txt","r+");
Clientinfo info;
long nline=0,n;
memset(&info,0,sizeof(Clientinfo));
int oldline=0;/*记录匹配位置的前一行的偏移量*/
CString str;
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);

下面是修改后的数据,修改第二行,没有影响前后的数据。  

?
1
2
3
11    1122     0    1122     *     *     0     0
22    222f     0    222f     *     *     0     0
33    333     0    333     *     *     0     0

总结

利用C语言替换文件中某一行的方法到这就基本结束了,大家都学会了吗?希望这篇文章的内容对大家的学习和工作能带来一定的帮助,如果有疑问,大家可以留言交流。

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部