c - 删除记录二进制文件c

标签 c file struct record binaryfiles

我刚刚编写了一个从二进制文件中删除记录的程序,但问题是即使程序找到了与该名称匹配的项,当我将记录写入临时文件时,它实际上并没有从文件中删除它文件。我在 else 条件下可能会出错吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    int dd;
    int mm;
    int yyyy;
}date;

struct _food
{
    char category[20];
    char name[30];
    int amount;
    data expiry;
    int calories;
} food;
int main()
{
    FILE* fba;
    FILE* temp;
    int found = 0;
    char nome_t[30];
    char newname[] = "alimenti.bin";
    char oldname[] = "temp.bin";
    fba = fopen("alimenti.bin", "rb");
    temp = fopen("temp.bin", "wb");

    printf("Type the name of the food you want to delete:\n");
    gets(nome_t);
    while(fread(&food,sizeof(food),1,fba))
    {
        if(strcmp(nome_t,food.name) != 0)   
        {
            fwrite(&food,sizeof(food),1,temp);

        }
        else{
            found = 1;
            printf("Match found. Food deleted.\n");

        }

    }
    if (!found){
        printf("No match.\n");

    }

    fclose(fba);
    fclose(temp);
    remove(oldname);
    rename(oldname,newname);
    system("PAUSE");
    return 0;


}

最佳答案

您正在删除更新的文件(temp.bin,又名 oldname):

remove(oldname);

在您尝试用它替换原始文件(alimenti.bin,又名 newname)之前:

rename(oldname,newname);

你的意思是:

remove(newname);

关于c - 删除记录二进制文件c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51150053/

相关文章:

c - scanf GCC for long double

c - 如何在 C 中编写 *nix 的基本名称

linux - 如何根据 'sys_seek' 计算 'sys_read'?

android - 在Android中访问包中的资源文件夹和原始文件夹中的文件列表

c++ - 用结构数据模拟

c - 我如何在 MIPSPro C 编译器中强制 0.0/0.0 返回零而不是 NaN?

c - 换页字符 (FF) 在 MISRA C2 标准中是否有效

python - 双击文件运行 python 脚本。如何获取该文件作为输入?

函数内的 C 结构体本地副本

c++ - 如何在 C++ 中连接两个结构类型变量?