Code Bye

C语言修改删除txt文件某位置的内容

txt文本格式:
name=admin
age=20
phone=123456

//修改name=sa,结果name=samin。
//修改age=20123,结果变成 age=20123hone=123456

也就是说修改内容跟原内容长度一样不会出现问题,如果大于或者小于文本修改内容就会出现,这是什么原因???
看过其他解决办法 说是先读取出来 修改后在一条条写入,可是我修改的txt文件量大两百多条 感觉不适用
下面贴出我的代码,请帮我看看该如何修改!


       char linebuff[512]={0},buff1[512]={0},buff2[512]={0};
        char *key,*val;
	int line_len=0,len=0,k=0,res;

	if((fp = fopen("rec.txt","r+")) == NULL)
	{
		printf("打开文件失败!\n");
		exit(1);
	}
       while(fgets(linebuff,512,fp))
	{
			line_len=strlen(linebuff);
			len+=line_len;
			sscanf(linebuff,"%[^=]=%[^=]",buff1,buff2);
			if(strcmp(key,buff1)==0)
			{
				len+=k;
				len-=strlen(linebuff);
				res=fseek(fp,len,SEEK_SET);
				if(res < 0){
					perror("fseek");
					break;
				}
				fprintf(fp,"%s=%s",key,val);
				break;
			}
			k++;
		}
		rewind(fp);
15分
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
引用 1 楼 zhao4zhong1 的回复:

所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。

引用 1 楼 zhao4zhong1 的回复:

所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。

文件量大的话这样做是不是太麻烦

别无他法。
15分

修改

哪怕你1个G的文件,只改一个字节,也得这样。

5分
这是通讯录吗?
看来得读出内容后,进行name匹配,再修改
5分
200条算什么大?!
如果仅仅读写,你眉毛没动就完成了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言修改删除txt文件某位置的内容