把嘎嘎
2021-06-02 11:52
采纳率: 100%
浏览 31

C语言文件io操作,从文件中间写入

有一个txt文件,内容:

123456789

 

现在想将45替换成ab,有办法对这个txt文件直接操作吗?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • bostonAlen 2021-06-02 15:19
    已采纳
    如果只想修改文件一部分。
    可以使用函数int fseek( FILE *stream, long offset, int origin );来定位你的文件指针。
    文件指针的位置决定你读写文件的起始位置。
    其中参数origin :表示从哪里开始偏移,值有:
    SEEK_SET: 文件开头
    SEEK_CUR: 当前位置
    SEEK_END: 文件结尾
    参数offset:表示偏移的字节数,正数表示正向偏移,负数表示负向偏移。
    比如
    你先读取文件内容,同时做判断,找到你要改的内容时,调用函数
    fseek(fp,10L,SEEK_CUR);把文件指针移动到离当前指针位置10个字节的地方(我们假设当前位置偏移10个字节就是你要修改的起始位置);
    这样你之后的读写都是从这个位置开始。
    不过要注意的是,你从这位置开始写新的内容,可以覆盖原内容,所以如果新的内容比你想覆盖的内容长的话,会把后面你想保留的内容也覆盖掉。
    这种思路,你想要实现修改指定内容,还需要把修改内容之后的数据也读出来备份,再一起写进去。
    所以最简单,还是直接生成新的文件替换原文件。
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • qfl_sdu 2021-06-02 12:24

    1.读取文件全部内容

    2.查找需要替换的内容和位置

    3.将替换位置前的内容写入文件,并将文件指针向后偏移(大小为需要被替换的字符串长度)

    4.将替换字符串位置之后的字符串写入文件

    评论
    解决 无用
    打赏 举报
  • bostonAlen 2021-06-03 16:59
    #include <stdio.h>
    #include <string.h>
     
    void modify(FILE *x, FILE *y);
     
    int main(void)
    {
        FILE *file1 = NULL;
        FILE *file2 = NULL;
        char filename1[] = "测试.txt";  //这里换成你的txt文件;
        char filename2[] = "副本.txt";  //这里不要动;
         
        if((file1 = fopen(filename1,"r")) == NULL)  //只读方式打开;
        {
            printf("文件打开失败!\n");
            return 1; 
        }
         
        if((file2 = fopen(filename2,"w")) == NULL)  //只写方式打开;
        {
            printf("文件打开失败!\n");
            return 1; 
        }
         
        modify(file1,file2);        
        fclose(file1);
        fclose(file2);
        file1 = file2 = NULL;
        remove(filename1);
        rename(filename2,filename1);    
        return 0;
    }
     
    void modify(FILE *x, FILE *y)  //参数:两个已打开文件的指针,第一个必须能读,第二个必须能写;
    {
        char temp[1024] = {0};
        char del[1024] = {0};
        char rep[1024] = {0};
        char *p1 = NULL;
        char *p2 = NULL;
         
        printf("请输入要替换的旧内容:");
        gets(del); 
        printf("请输入要替换的新内容:");
        gets(rep);
          
        while(fgets(temp,1024,x))
        {    
            p2 = temp;    
             
            while((p1 = strstr(p2,del)) != NULL)
            {                    
                for(int i = 0; &p2[i] != p1; ++i)
                    fputc(p2[i],y);
                             
                for(int i = 0; i < strlen(rep); ++i)
                    fputc(rep[i],y);
                     
                p2 = p1 + strlen(del);                                                        
            }
             
            for(int i = 0; p2[i] != '\0'; ++i)
                fputc(p2[i],y);
                                         
        }
    }
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题