有一个C语言的题目要求对文件中的数据进行删除操作,据我所知C语言好象没有删除文件中的数据的函数?于是只能考虑通过相关的文件打开方式(r,w,a,r+,w+,a+)与fread(),fwrite()等函数实现删除的操作!
首先把文件中的数据读取到一个指针结构体,由于文件中的数据大小不能确定,所以不能使用结构体数组,使用指针结构体目的是使用malloc()来动态分配存储空间.然后再把数据读取到这个结构体中,接着筛选数据写回到文件中.
由于我们得先取出文件中数据跟长度,所以文件的打开方式选择r:读取数据但不删除(不选r+因为只读取不写入,不选w,w+因为删除了数据还取什么?不选a,a+根本不需要理由),数据读取完之后是重新写入的操作,文件打开方式选择w.
struct info
{
char name[30];
char addr[50];
long telno;
}*temp,client;
void del()
{
FILE *fp1,*fp2,*fp3;
int count=0;
char name[30];
if((fp1=fopen("telefon.dat","r"))==NULL)
{
printf("Error Open telefon.dat file");
return;
}
while((fread(&client,sizeof(struct info),1,fp1))==1)
count+=1; //统计长度
temp=(struct info *)malloc(count*(sizeof(struct info)));//分配存储空间
rewind(fp1);
fread(temp,sizeof(struct info),count,fp1); //读取文件中的数据到指针结构体
fclose(fp1);
if((fp2=fopen("telefon.dat","w")==NULL)//删除原文件,创建同名的空文件用于写入
{
printf("Error Create new telefon.dat file");
return;
}
else
{
fclose(fp2);
fp3=fopen("telefon.dat","a")
printf("/t/n/nEnter Subscriber name (upto 30 chars):");
scanf("%s",&name); //指定删除对象
for(int i=0;i
if(strcmp(temp[i].name,name)==0)
printf("Name=%s/n",client.name); //不写入,也就是删除
else
fwrite(&temp[i],sizeof(struct info),1,fp3); //以追加方式写入
}
fclose(fp3);
}
}