3

次の関数は、名前を受け取り、All.bin という名前のバイナリ ファイルからその名前を削除します。私の知る限り、正常に動作しますが、削除機能は常にエラーを出します

 void del(char *name)
    {
        struct database d; //strucutre variable containing name and meaning
        FILE *p, *q;
        p = fopen("All.bin","r"); //original file
        q = fopen("temp.bin","w"); // temp file
        while(fread(&d,sizeof(d),1,p))
            if(strcmp(d.name,name) != 0)
                fwrite(&d,sizeof(d),1,q);
        fclose(p);
        fclose(q);
        if(remove("All.bin")!=0) //PROBLEM
            printf("Error");
        if(rename("temp.bin","All.bin")!=0)
            printf("Error@");
        getch();
    }
4

2 に答える 2

0

All.bin のファイル許可を確認し、 unlink() 関数も試してください。

All.bin が同じプロセスによって生成された場合 (たとえば、関数 u 呼び出しが一度は機能する可能性がありますが、その後は機能しません)、ケース fclose() でファイル ストリームのハンドルを閉じることを確認する必要があります。

于 2013-03-28T12:51:27.313 に答える
0

これは私にとってはうまくいきます。All.bin ファイルの作成後にファイルのアクセス許可を変更する

于 2013-03-28T08:32:45.967 に答える