楷shu 2023-03-14 05:33 采纳率: 100%
浏览 95
已结题

c语言,remove和rename都无法执行怎么办啊

文件里面是存在数据的,移除和重命名之前也关闭了文件,测试了很久发现数据删除不掉,才发现是remove和rename根本没执行成功。


void durg_delete() {
    Drug medicine;
    FILE *fp1, *fp2;
    char id[20];
    int found = 0;
    fp1 = fopen("medicine.dat", "rb"); // 只读
    fp2 = fopen("temp.dat", "wb"); // 创建临时文件,用于存储不需要删除的药品
    printf("请输入要删除的药品编号:");
    scanf("%s", id);
    while (fread(&medicine, sizeof(Drug), 1, fp1) == 1) { // 循环读取文件中的药品信息
        if (strcmp(medicine.id, id) != 0) { // 如果不是要删除的药品,则将药品信息写入临时文件
            fwrite(&medicine, sizeof(Drug), 1, fp2);
        } else {
            found = 1; // 标记已经找到了要删除的药品
        }
    }
    fclose(fp1);
    fclose(fp2);
//    remove("medicine.dat"); // 删除原来的文件,防止下次使用出现数据错误
    if (remove("medicine.dat") == 0) {
        printf("File removed successfully.\n");
    } else {
        perror("Error deleting file");
 
    }
    system("pause");
//    rename("temp.dat", "medicine.dat"); // 将临时文件名字改为原来的文件名,这样没有删除的数据也不会丢失,回到主函数也可以直接调用
    if (rename("temp.dat", "medicine.dat") == 0) {
        printf("File renamed successfully.\n");
    } else {
        perror("Error renaming file");

    }
    system("pause");
    if (found) {
        printf("药品删除成功!\n");
    } else {
        printf("药品不存在!\n");
    }
    system("pause");
    system("cls");
}
  • img

展开全部

  • 写回答

3条回答 默认 最新

  • 海拥✘ 全栈领域优质创作者 2023-03-14 06:09
    关注

    如果remove和rename函数都无法执行成功,可能是以下几个原因之一:

    1.文件被其他程序或进程占用,无法进行修改和删除操作。这时候需要先关闭占用该文件的程序或进程,再进行操作。

    2.文件不存在或路径错误,导致无法找到要操作的文件。可以检查一下文件路径是否正确,文件是否存在。

    3.权限不足,无法进行文件修改和删除操作。可以尝试以管理员身份运行程序,或者修改文件的权限以允许对其进行修改和删除操作。

    在你的代码中,你已经在remove和rename函数执行前关闭了文件,因此不是文件被占用的原因。可能是文件路径不正确或权限不足导致的问题。可以尝试检查一下文件路径是否正确,或者以管理员身份运行程序。同时,你可以在执行remove和rename函数时添加一些错误处理代码,如下所示:

    if (remove("medicine.dat") == 0) {
        printf("File removed successfully.\n");
    } else {
        perror("Error deleting file");
        exit(EXIT_FAILURE); // 函数执行失败时退出程序
    }
    
    if (rename("temp.dat", "medicine.dat") == 0) {
        printf("File renamed successfully.\n");
    } else {
        perror("Error renaming file");
        exit(EXIT_FAILURE); // 函数执行失败时退出程序
    }
    

    这样可以让程序在执行remove和rename函数失败时输出错误信息,并退出程序,方便查找问题所在。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 已采纳回答 3月14日
  • 创建了问题 3月14日

悬赏问题

  • ¥15 爱快路由器端口更改错误导致无法访问
  • ¥20 安装catkin时遇到了如下问题请问该如何解决呢
  • ¥15 VAE模型如何输出结果
  • ¥15 编译python程序为pyd文件报错:{"source code string cannot contain null bytes"
  • ¥20 关于#r语言#的问题:广义加行模型拟合曲线后如何求拐点
  • ¥15 fluent设置了自动保存后,会有几个时间点不保存
  • ¥20 激光照射到四象线探测器,通过液晶屏显示X、Y值
  • ¥50 数据库开发问题求解答
  • ¥15 安装anaconda时报错
  • ¥15 小程序有个导出到插件方式,我是在分包下引入的插件,这个export的路径对吗,我看官方文档上写的是相对路径
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部