修改小文件中特定字符串的程序

来源:互联网 发布:基于网格的聚类算法 编辑:程序博客网 时间:2024/05/17 04:11
#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;
}
 
原创粉丝点击