Удалить запись двоичного файла c - PullRequest
0 голосов
/ 03 июля 2018

Я только что создал программу для удаления записи из двоичного файла, но проблема в том, что даже если программа находит совпадение с именем, она фактически не удаляет ее из файла, когда я записываю записи во временный файл. файл. Возможно, я ошибаюсь в другом состоянии?

#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;


}

1 Ответ

0 голосов
/ 03 июля 2018

Вы удаляете обновленный файл ( temp.bin , он же oldname):

remove(oldname);

перед попыткой заменить исходный файл ( alimenti.bin , он же newname) на него:

rename(oldname,newname);

Вы имели в виду:

remove(newname);
...