system("cls");
another = 'y';
while(another == 'y')
{
printf("\nEnter name of employee to delete ");
scanf("%s",empname);
ft = fopen("Temp.dat","wb");
rewind(fp);
while(fread(&e,recsize,1,fp) == 1)
{
if(strcmp(e.name,empname) != 0)
{
fwrite(&e,recsize,1,ft);
}
}
fclose(fp);
fclose(ft);
remove("EMP.DAT");
rename("Temp.dat","EMP.DAT");
fp = fopen("EMP.DAT", "rb+");
printf("Delete another record(y/n)");
another = getche();
}
これは、従業員名を使用して c のバイナリ ファイルからエントリを削除するコードです。しかし、emp idで削除したい場合、エントリは削除されませんが、ファイルのすべての内容が削除されます!
case '4':
system("cls");
another = 'y';
while(another == 'y')
{
printf("\nEnter employee id to delete ");
scanf("%d",&empid);
ft = fopen("Temp.dat","wb");
rewind(fp);
while(fread(&e,recsize,1,fp) == 1)
{
if(e.userid!=empid)
{
fwrite(&e,recsize,1,ft);
}
}
fclose(fp);
fclose(ft);
remove("EMP.DAT");
rename("Temp.dat","EMP.DAT");
fp = fopen("EMP.DAT", "rb+");
printf("Delete another record(y/n)");
another = getche();
}