C语言关于对文件的删除操作

  有一个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<count;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);
  }
}

  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值