最近需要在文件原位置修改内容,该方法主要用于较少的文件内容,同时修改之后的内容和修改之前的格式一致,较适用于配置文件的原位置修改。
下面是范例代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE* fp, *p;
long flen = 0,m = 20;
char i[128]="VALUE";
char i1[128];
char n[128] = "替换之后的内容";
fp = fopen("card.txt", "r+"); //该文件在当前cpp文件同级目录下
//scanf("%d", &i);
while (!feof(fp)) {
//所获取的内容为中文,需将文件的编码类型改成ANSI,就可避免乱码
fscanf(fp, "%s = %d", i1,&m);
if (strcmp(i,i1)==0) {
p = fopen("1.txt", "w");
fprintf_s(p, "%s = %d", i, m);
flen = ftell(p);
fclose(p);
m = 90;
fseek(fp, -flen, 1); //表示从当前位置向前偏移flen个字符,fp指向该偏移
fprintf(fp, "%s = %d\n", i, m);
break;
}
}
fclose(fp);
return 0;
}
//将文件原内容 “VALUE = 10” 改成"VALUE = 90"
主要几点:
1、将要修改的内容临时写到另一个临时文件中,获取文件中内容的长度;
2、将原文件进行重定位使用fseek函数;
3、使用fprintf将更新的内容写到原位置
小tips:
1、了解ftell(),fseek()用法
参考
fseek——解析1_jinlunyue的博客-CSDN博客
2、主要中文乱码问题,方法之一,修改文件的编码集
————————————————
版权声明:本文为CSDN博主「hellocode_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hellocode_/article/details/127858814