Отказано в доступе при использовании remove ()

У меня есть эта проблема. У меня есть программа на 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);
}

У кого-нибудь были идеи по решению проблемы?

1

Решение

Когда-то у меня была такая же проблема, как у вас, но теперь я решил ее.
У вас должны быть некоторые файловые указатели, которые не закрывались при использовании remove(), Он не обязательно должен находиться в одном и том же файле .cpp, возможно, в разных файлах.

Возьмите меня в качестве примера, я думаю, что я закрыл файл, но позже я узнал, что у меня есть «вернуть» предложения до fclose() что приводит к неправильному закрытию файла.

PS:
1. У меня есть 3 .cpp файлы.

  1. Файл, содержащий remove() использовался после файла (A.cpp), из-за которого файл не закрывался правильно.

  2. Потому что A.cpp неправильно закрыл файл, так что появляется сообщение «Отказано в доступе».

  3. Мой английский оставляет желать лучшего. Надеюсь, это поможет вам.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]