文件里面是存在数据的,移除和重命名之前也关闭了文件,测试了很久发现数据删除不掉,才发现是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");
}