m0_51507696 2021-09-04 14:36 采纳率: 100%
浏览 19
已结题

请问,为什么我不能用将文件跳过某段数据读取到缓冲区后删除文件再创建一个同路径同名文件后将缓冲区的数据写入到该文件的方法来删除文件中的指定段落


void delete_file_paragraphs(char* path,long head_offset,long trail_offset){
    FILE* fp=fopen(path,"rb+");//打开被操作文件
    /*先以长度不清零的方式打开被操作文件,用从头顺序读取的方式跳过要删除的区间,将读取到的数据存入缓存,删除被操作文件,以从头写入并创建文件的方式打开之前被操作文件的路径,将缓存数据写入文件,释放缓存*/
    if(fp!=NULL){
        fseek(fp,0,SEEK_END);//被操作文件偏移到文件尾
        long file_trail=ftell(fp);//保存了被操作文件尾的偏移量,和文件长度
        char* BUF_=(char*)malloc(sizeof(char)*(file_trail-head_offset));//建立缓存区用来保存文件数据
        long count=0;//计数变量
        long offset_CUR=0;//用于保存文件当前偏移量
        for(fseek(fp,0,SEEK_SET);file_trail!=offset_CUR;count++){
            if(offset_CUR==head_offset){
                fseek(fp,(trail_offset-head_offset),SEEK_CUR);
            }//跳过区间
            fscanf(fp,"%c",BUF_+count);//将从文件获取到的数据存入缓冲区
            offset_CUR=ftell(fp);//获取当前偏移量
        }//将文件指定内容写入缓存
        fclose(fp);//关闭文件
        remove(path);//删除文件
        fp=fopen(path,"w");//创建并打开文件
        //fp=fopen("C:\\Users\\user\\Desktop\\新建文本文档30.txt","w");
        for(count=0;count<file_trail-4;count++){
            fprintf(fp,"%c",*(BUF_+count));//从缓存向文件写入数据
            printf("%c",*(BUF_+count));
        }//将缓存数据写入文件
        free(BUF_);//释放缓存
        fclose(fp);//关闭文件
    }
}//根据段首和段尾的偏移量删除文件中的任意段落。形参1为被操作文件的路径,形参2为段落首部偏移量,形参3为段落尾部偏移量

/附上如上代码/

现象是执行前和执行后的文件内容没有变化,但是将第20和第21行改成——

//fp=fopen(path,"w");//创建并打开文件

fp=fopen("C:\Users\user\Desktop\新建文本文档30.txt","w");

——这样后,新建文本文档30.txt中的内容是正确的

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-09-04 16:49
    关注

    那应该检查一下你传递的path到底是什么值了啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月12日
  • 已采纳回答 9月4日
  • 修改了问题 9月4日
  • 创建了问题 9月4日

悬赏问题

  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题