c语言修改指定一行的内容

c语言修改指定一行的内容,第1张

我大概明白你的意思,一个文件里面修改一行嘛.

2种方法,提供思路给你吧,我就懒得写代码了

1,把全部内容读出来, 保存在字符串,定位到你要修改的地方,再重写进去!

File *pF = fopen("1.conf", "r")

fread(buf, 1024, 1, pF)

....//修改

fclose(pF)

pF = fopen("1.conf", "w")

fwrite(buf, 1024, 1, pF)

....

2.修改文件,有个条件,就是你修改的内容必须比你原来的内容短,比如:localhost 修改成 server , server比localhost短的话,后面有多的字符填空格.如果server比localhost长的话,必须使用第一种方法才能修改了....

File *pF = fopen("1.conf", "r+")

fseek(pF, 10, SEEK_CUR)//定位到文件的某个位置10表示偏移量,负数往前,正数往后,SEEK_CUR表示当前位置,SEEK_SET表示文件开始位,SEEK_END表示文件结尾

C语言提供了文件 *** 作,但是替换文件的某一行比较麻烦,下面一个参考方法,文件中存贮的内容如下所示

通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell 。具体的函数函数原型如下所示:

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)

首先,数据写入到文件中的是追加的形式。具体的写入代码如下所示:

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

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中实现的:

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)

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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10093336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存