#include<unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int chang_file_data(const char *src ,char *des ,char *fpath_in,char *fpath_out)
{
//小弟刚刚开始写程序,不太熟练,代码比较啰嗦,且耗费内存,见谅
// 处理小文件中的数据
// des 文件中存在,待被修改的字符串
// src 用来替换文件中字符串的数据
char *filebuff;
char *str_cmp;
// char *str_end; //所替换的字符串末尾地址
int file_len = 0; //文件大小
int len = 0; //开始写数据的文件长度
FILE *fp = fopen(fpath_in,"r+");
if(fp == NULL)
{
perror("fopen");
return -1;
}
fseek(fp,0,SEEK_END);
file_len = ftell(fp); //获得文件原始长度
filebuff = (char *)malloc(file_len + 1);
memset(filebuff,0,file_len +1);
rewind(fp);
fread(filebuff,1,file_len,fp);
fclose(fp);
//读取文件数据到内存中
//读取要修改的字符串的位置
str_cmp = strstr(filebuff,des);
//str_end = strstr(filebuff,"1194");
len = file_len - strlen(str_cmp);
FILE *fp_out = fopen(fpath_out,"w");
if(fp_out == NULL)
{
perror("fopen");
}
fwrite(filebuff,1,len,fp_out);
//已写入要修改的字符串以前的字符,进行要修改的字符串的填充
fwrite(src,1,strlen(src),fp_out);
//写入所修改字符串以后的数据到文件中
fwrite(filebuff+len+strlen(des),1,strlen(str_cmp)-strlen(des),fp_out);
fclose(fp_out);
return 0;
}
int main(int argc,char *argv[])
{
//以下示例,将文件pin.file 中的 等待更改” 修改为 “ 达成目标” ,输出新文件pout.file
int i = chang_file_data("达成目标","等待更改","pin.file","pout.file");
if(i != 0)
{
return -1;
}
return 0;
}