線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1271
推到 Plurk!
推到 Facebook!

求助C語言請問要如何刪除二進位檔案裡的資料內容?

答題得分者是:ikk
azure532
一般會員


發表:1
回覆:1
積分:0
註冊:2008-05-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-24 17:30:49 IP:211.20.xxx.xxx 訂閱
各位大大您好:
這是小弟我寫的程式 這個程式首先先讀取了store.txt 裡面的內容為A1
A2
A3
A4
再來good.bin為二進位檔案 這個假設裡面有五筆資料 我要刪除其中第三筆 而最後兩筆依序往上補 我該如何做呢?我想了很久還是不知道該如何去做 麻煩各位先進前輩們指點迷津

[code cpp]
請在此區域輸入程式碼
#include
#include
typedef struct
{
int sn;
char name[10];
char position[10];
}STORE;
STORE goods;

int main(void)
{
FILE *fp,*fptr;
char *s=(char *)calloc(10,sizeof(char));
char **s1,*sss;//用來存store.txt檔案
int base;//選擇要做哪個動作
int idx=0;//用來當1.A1 2.B2的索引值
int i;
int m;//用來做動態第一維元素的大小
int num;//用來選擇1=A1 2=A2的
int cmp;//比較sn是否相同
int numread;
if((fp=fopen("store.txt","r"))!=NULL)
{
while((fgets(s,10,fp))!=NULL)
{
i ;
}
}
else
{
printf("error");
}
fclose(fp);
m=i;
s1=(char **)calloc(m,sizeof(char *) (m*4,sizeof(char)));
for(i=0,sss=(char *)(s1 m);i {
s1[i]=sss;
}
while(1)
{
printf("**********\n");
printf("1.store in\n");
printf("2.search\n");
printf("3.display all\n");
printf("4.delete\n");
printf("5.exit\n");
printf("**********\n");
scanf("%d",&base);
switch(base)
{
case 1:
if((fp=fopen("goods.bin","a b"))!=NULL)
{
printf("SN:");
fflush(stdin);
scanf("%d",&goods.sn);
printf("NAME:");
fflush(stdin);
scanf("%s",goods.name);
printf("position:(");
fflush(stdin);
if((fptr=fopen("store.txt","r"))!=NULL)
{
while((fgets(s,10,fptr))!=NULL)
{
strtok(s,"\r\n");
s1[idx]=s;
printf("%d.%s:",idx,s1[idx]);
idx ;
if(idx==4)
idx=0;
s=(char *)calloc(10,sizeof(char));
}
printf(")");
}
else
{
puts("error");
}
scanf("%d",&num);
fflush(stdin);
switch(num)
{
case 0:
//goods.position=*(s1 0);
strcpy(goods.position,*(s1 0));
break;
case 1:
strcpy(goods.position,*(s1 1));
//goods.position=*(s1 1);
break;
case 2:
strcpy(goods.position,*(s1 2));
//goods.position=*(s1 2);
break;
case 3:
strcpy(goods.position,*(s1 3));
//goods.position=*(s1 3);
break;
}
printf("%d:%s:%s\n",goods.sn,goods.name,goods.position);
fwrite(&goods,sizeof(STORE),1,fp);
}
else
{
puts("error");
}

fclose(fp);
fclose(fptr);

break;
case 2:
if((fp=fopen("goods.bin","rb"))!=NULL)
{

printf("search SN:");
fflush(stdin);
scanf("%d",&cmp);
for(i=0;i<100;i )
{
numread=fread(&goods,sizeof(STORE),1,fp);
if(numread==0)
{
puts("not search");
break;
}

if(goods.sn==cmp)
{
//puts("find your search");
printf("SN:%d\n",goods.sn);
printf("Name:%s\n",goods.name);
printf("location:%s\n",goods.position);
break;
}
}
}
else
{
puts("error4");
}
fclose(fp);
break;

case 3:
if((fp=fopen("goods.bin","rb"))!=NULL)
{
for(i=0;i<100;i )
{

numread=fread(&goods,sizeof(STORE),1,fp);
if(numread==0)
{
//puts("not search");
break;
}
printf("SN:%d\t",goods.sn);
printf("Name:%s\t",goods.name);
printf("location:%s\n",goods.position);
}
}
else
{
puts("error5");
}
fclose(fp);
break;
case 4:
if((fp=fopen("goods.bin","rb"))!=NULL)
{
printf("delete SN:");
fflush(stdin);
scanf("%d",&cmp);
for(i=0;i<100;i )
{
numread=fread(&goods,sizeof(STORE),1,fp);
if(numread==0)
{
puts("not delete");
break;
}
if((fseek(fp,sizeof(STORE),SEEK_SET))!=0)
{
puts("456");
perror("fseek failed");
}
if(goods.sn==cmp)
{
//fseek(fp,sizeof(STORE),SEEK_CUR);
puts("123");
fflush(stdin);
break;
}

}
}
else
{
puts("error7");
}
fclose(fp);
break;
case 5:
exit(1);
break;
default:
puts("not choose input again");
break;
}
}
free(s);
free(s1);
return 0;
}

[/code]
附加檔案:49c8a849d962f_store.txt
編輯記錄
azure532 重新編輯於 2009-03-24 17:36:00, 註解 無‧
azure532
一般會員


發表:1
回覆:1
積分:0
註冊:2008-05-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-24 17:34:39 IP:211.20.xxx.xxx 訂閱
我的case 4:刪除這個動作我不知道該如何下手 從哪個方向去做~~ 請板上的各位前輩們幫忙小弟的問題謝謝
程式碼:
http://pk168.myweb.hinet.net/mygoods.rar
編輯記錄
azure532 重新編輯於 2009-03-24 17:38:18, 註解 無‧
azure532 重新編輯於 2009-03-24 18:06:53, 註解 無‧
azure532 重新編輯於 2009-03-27 21:16:07, 註解 可以再請問您修改檔案內容也可以用相同的方法~下去做嗎‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-27 16:26:24 IP:163.28.xxx.xxx 訂閱
再開一個檔寫進需要的資料,
把原來檔案刪除.
再把新檔改為原檔名.
------
FPGA驗證, FPGA開發平台, http://smims.com
系統時間:2024-04-19 21:28:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!