У меня есть эта проблема. У меня есть программа на C ++; Программа успешно создает файлы, в которых я сохраняю записи. В одной процедуре я редактирую одну запись и создаю другой файл с другим именем. В конце я закрываю оба файла, и когда я пытаюсь удалить старый и переименовать новый, у меня появляется эта ошибка:
Ошибка удаления файла: отказано в разрешении.
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);
}
У кого-нибудь были идеи по решению проблемы?
Когда-то у меня была такая же проблема, как у вас, но теперь я решил ее.
У вас должны быть некоторые файловые указатели, которые не закрывались при использовании remove()
, Он не обязательно должен находиться в одном и том же файле .cpp, возможно, в разных файлах.
Возьмите меня в качестве примера, я думаю, что я закрыл файл, но позже я узнал, что у меня есть «вернуть» предложения до fclose()
что приводит к неправильному закрытию файла.
PS:
1. У меня есть 3 .cpp файлы.
Файл, содержащий remove()
использовался после файла (A.cpp), из-за которого файл не закрывался правильно.
Потому что A.cpp неправильно закрыл файл, так что появляется сообщение «Отказано в доступе».
Мой английский оставляет желать лучшего. Надеюсь, это поможет вам.
Других решений пока нет …