佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1046|回复: 2

【c 语言】delete binary file里面的record要怎样?

[复制链接]
发表于 7-2-2014 02:31 AM | 显示全部楼层 |阅读模式
我是想要删除在binary file的一些资料,其他没有被选取delete的资料还会出现在本来的地方,请各位大大帮帮忙,拜托拜托<3

void deleterecord()
{
char recno[20];
char ch;
struct customerdetails t;
FILE *fp, *ft;
fp=fopen("customer.dat", "rb");
ft=fopen("Temp.dat", "wb");
printf("Enter the customer Number to delete : ");
scanf("%s", recno);
while((fread(&t, sizeof(t), 1, fp)))
{
if(strcmp(recno,t.id)==0)
{
printf("\ncustomer Number : %s", t.id);
printf("\ncustomer Name : %s",t.name1);
printf("\ncustomer contact : %s",t.contact);
printf("\nBook ID:%s",t.bookid);
printf("\nBook Name:%s",t.bookname);
printf("\nBook Type:%s",t.booktype);
printf("\nAre you sure want to delete?(Y/N)");
fflush(stdin);
scanf("%c", &ch);
}
}
if(ch=='y'||ch=='Y')
{
rewind(fp);
printf("Delete Successful");
while((fread(&t, sizeof(t), 1, fp)))
{
if(strcmp(recno,t.id)!=0)
{
fwrite(&t, sizeof(t), 1, ft);
}
}
}
else
fclose(fp);
fclose(ft);
remove("customer.dat");
rename("Temp.dat", "customer.dat");
}

回复

使用道具 举报


ADVERTISEMENT

发表于 9-2-2014 11:19 AM | 显示全部楼层
最简单的方法:
1)开启File,
2)用Linked List读取所有的Records,
3)根据Linked List的规则进行增添、删除、编辑等动作,
4)将编辑完的Records写回File里面。

如果你不懂Linked List的话:
1)开启File,将所有record读取储存在struct array里面,
2)确定你的Struct里面有一个item用来mark record as deleted (i.e. 增添一个int deleted = 1 -> to be deleted),
3)将你要删除的record标注为deleted,
4)将所有的Record逐个写回File里面,跳过那些Marked as Deleted的Record。
回复

使用道具 举报

 楼主| 发表于 10-2-2014 04:29 PM | 显示全部楼层
geekman 发表于 9-2-2014 11:19 AM
最简单的方法:
1)开启File,
2)用Linked List读取所有的Records,

非常感谢你。。开贴那么久,只有你回我啊。。XD 感谢感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 17-5-2024 09:13 PM , Processed in 0.056434 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表