2014-01-19 49 views
0

我以爲我應該把所有的文件讀入程序,然後刪除文件並用相同的名稱再次打開,之後我應該使用例如函數和if(!strcmp(.,.))我應該從fwrite結構中的每個元素。我嘗試了各種方式,但沒有奏效。有人能幫助我嗎?我會很感激。如何刪除二進制文件中的元素?

void usun_element() 
{ 
    int i; 
    char nazwa[100]; 
    FILE *fp; 
    if((fp=fopen("katalog.bin", "rb"))==NULL) 
    { 
     printf("Brak pliku katalog na dysku.\n"); 
     return; 
    } 
    else 
    printf("Wpisz nazwe, ltora chcesz usunac z listy: "); 
    scanf("%s", &nazwa); 
     otworz(); 
     remove("katalog.bin"); 
     otworz(); 
     i=0; 
     while(i<ost) 
     { 

     if(!strcmp(nazwa,kat[i].nazwa)) 
      { 
       fwrite(&kat[i].nazwa, sizeof(kat), 1, fp); 
       fwrite(&kat[i].typ, sizeof(kat), 1, fp); 
       fwrite(&kat[i].rodzaj, sizeof(kat), 1, fp); 
       fwrite(&kat[i].posiadane, sizeof(kat), 1, fp); 
      } 
    else 
    { 
     ost=i-1; 
    } 
    i++; 


} 
} 
+2

不要害羞,告訴我們你的代碼。有沒有其他的方式來了解你究竟想要什麼 – Dabo

+0

是的.. Dabo是對的:) – MLSC

+0

我用了一些不是英文的單詞,我認爲這會對你有些麻煩,要理解;) – user3212526

回答

1

將格式說明符與參數匹配。
使用正確的sizeof()。
可疑約ost=i-1;。也許不需要。

static const char *EnterNameToDelete = "Wpisz nazwe, ltora chcesz usunac z listy: "; 
fputs(EnterNameToDelete, stdout); 
// scanf("%s", &nazwa); 
scanf("%99s", nazwa); // drop the & 

if(!strcmp(nazwa, kat[i].nazwa)) { 
    // use the correct sizeof() 
    if (fwrite(&kat[i].nazwa , sizeof(kat[i].nazwa) , 1, fp) == 0 || 
     fwrite(&kat[i].typ  , sizeof(kat[i].typ)  , 1, fp) == 0 ||  
     fwrite(&kat[i].rodzaj , sizeof(kat[i].rodzaj) , 1, fp) == 0 || 
     fwrite(&kat[i].posiadane, sizeof(kat[i].posiadane), 1, fp)) { 
    Handle_IO_Error(); 
    } 
} 

如果OP張貼kat聲明和結構將有所幫助。