gpt4 book ai didi

c - 如何从二进制文件中删除结构?

转载 作者:太空狗 更新时间:2023-10-29 15:35:45 24 4
gpt4 key购买 nike

在用户通过输入 ID 号指定要删除的员工后,如何从二进制文件中删除员工?当用户输入 ID 时,我想删除与该员工对应的所有信息。

struct EmployeeInformation {
char Firstname[32];
char Lastname[32];
char Address[32];
char ID[8];
char Duration[8];
};

struct EmployeeInformation Employee;

void DeleteEmployee() {

FILE *fd;
char EmployeeID[8];

printf("\n>>Delete Employee<<\n");

//Ask user for ID of employee they wish to delete.
printf("Employee ID:");
fgets(EmployeeID, 6, stdin);

if ((fd = fopen(BINARY_FILE, "rb")) == NULL) {
printf("Error, Cannot Open File.\n");
} else {
fseek(fd, 0, SEEK_SET);
fread(&Employee, sizeof(struct EmployeeInformation), 1, fd);

if (strcmp(EmployeeID, Employee.ID) == 0) {

//Employee Found

} else {
printf("Employe Not Found!\n");
}
}
fclose(fd);
}

最佳答案

从文件中删除条目的最常见方法是通过在您的结构中放置一个标志来将其标记为已删除:

struct EmployeeInformation {
char Firstname[32];
char Lastname[32];
char Address[32];
char ID[8];
char Duration[8];
int deleted; // deleted!=0 means record deleted
};

如果你不能修改结构(可能是因为你已经有一个写入的文件),一个解决方案可能是:每次你需要删除操作时,将整个文件写入一个新文件,而不写入删除的记录。

请注意,如果您有一个包含大量记录的文件,删除操作将花费您很多时间(用于重写新文件中的所有记录)。因此,我建议您使用标志将记录标记为已删除,有时(可能每周 1 次)重写整个文件以删除已删除的记录。

关于c - 如何从二进制文件中删除结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23323723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com