2

この問題があります。C++ プログラムがあります。プログラムは、レコードを保存するファイルを正常に作成します。ある手順では、1 つのレコードを編集し、別の名前で別のファイルを作成します。最後に両方のファイルを閉じ、古いファイルを削除して新しいファイルの名前を変更しようとすると、次のエラーが発生します。

ファイルの削除中にエラーが発生しました: アクセス許可が拒否されました。

void SoldDevices()
{
 int soldQuantity = 0;
 char soldModel[20];
 ElShop tempVar;
 FILE *newFile; 

 printf("Enter model of sold device: ");
 gets(soldModel); 

 file = fopen(fileName, "r+"); 
 fread(&shop, sizeof(shop), 1, file);

 while (!feof(file))
 {
       if (strcmp(shop.model, soldModel) == 0)
       {
             tempVar = shop;
             break;
       }

       fread(&shop, sizeof(shop), 1, file);
 }

 fclose(file);

 printf("Enter how much devices are sold: ");
 scanf("%d", &soldQuantity);

 while (tempVar.quantity < soldQuantity)
 {
       printf("No items available!\n");
       printf("Enter how much devices are sold: ");
       scanf("%d", &soldQuantity);
 }

 tempVar.quantity = tempVar.quantity - soldQuantity;
 printf("%d\n", tempVar.quantity);

 file = fopen(fileName, "rb");
 newFile = fopen("New", "wb");

 fread(&shop, sizeof(shop), 1, file);

 while (!feof(file))
 {
      if(strcmp(soldModel, shop.model) == 0)
      {
          fwrite(&tempVar, sizeof(shop), 1, newFile);
      }
      else
      {
          fwrite(&shop, sizeof(shop), 1, newFile);
      }

      fread(&shop, sizeof(shop), 1, file);
 }
 fclose(newFile); 
 fclose(file);

 if( remove( fileName ) != 0 )
     perror( "Error deleting file" );
 else
     puts( "File successfully deleted" );
 rename("New", fileName);
}

誰かが問題を解決するためのアイデアを持っていましたか?

4

1 に答える 1

2

私はかつてあなたと同じ問題を抱えていましたが、今では解決しました。を使用したときに閉じていないファイル ポインタがいくつかあったはずですremove()。同じ .cpp ファイルにある必要はなく、別のファイルにある場合もあります。

私を例にとると、ファイルを閉じたと思いますが、後で「return」文が前にfclose()あり、ファイルが正しく閉じられないことがわかりました。

PS: 1. 3 つの .cpp ファイルがあります。

  1. を含むファイルremove()は、ファイルを正しく閉じなかったファイル (A.cpp) の後に使用されました。

  2. A.cpp がファイルを正しく閉じていないため、Permission Denied が表示されます。

  3. 私の英語は下手です。これがあなたを助けることを願っています。

于 2017-03-05T03:36:33.607 に答える