为什么这个函数在运行时会删除所有文件数据?

时间:2014-06-05 15:09:02

标签: c

当我运行程序并且我想删除产品代码时,此功能会删除所有文件。

你能帮我吗?

void PRODUCT_delete()
{
    int code;
    FILE *stock=fopen("stock.dat","wb+");

printf("PLEASE TYPE THE CODE OF THE PRODUCT YOU WISH TO DELETE:\t");

scanf(" %d",& code);
printf("\n");

fseek(stock,0,SEEK_END);

int fl_size=ftell(stock);
int quantity= fl_size/sizeof(product);

rewind(stock);

prdct cprd= (product *)malloc (sizeof(product)*quantity);
assert(cprd);

prdct cprd1= (product *) malloc(sizeof(product)*quantity);
assert(cprd1);

fread(cprd1,sizeof(product),quantity,stock);

int i;

for(i=0;i<quantity;i++)
    {
    if(cprd1[i].code!=code)
        {
    cprd[i]=cprd1[i++];

    }
        else
        {
            continue;
    }
     }

 fwrite(cprd,sizeof(product),quantity,stock);

 fclose(stock);
 free(cprd1);
 free(cprd);
 printf("\a THE PRODUCT DELETED!!!\n")
}

2 个答案:

答案 0 :(得分:0)

请参阅:

w+截断文件。您应该使用r+

显然b修饰符用于windows(非posix系统)。

答案 1 :(得分:0)

一些问题:

  1. 使用wb打开文件+截断文件,您应该使用新文件进行输出,然后重命名
  2. &lt;错误,已删除&gt;
  3. 如果删除产品代码,则需要减少数量