我有这个问题。我有一个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);
}
有没有人有一些想法来解决这个问题?
答案 0 :(得分:1)
我曾经遇到过和你一样的问题,但现在我已经解决了。
使用remove()
时,必须有一些文件指针没有关闭。它不必在同一个.cpp文件中,也可以在不同的文件中。
以我为例,我想我已经关闭了文件,但后来我发现我已经&#34;返回&#34; fclose()
之前的句子导致文件无法正确关闭。
PS: 1.我有3个.cpp文件。
在文件(A.cpp)之后使用包含remove()
的文件,该文件未正确关闭文件。
因为A.cpp没有正确关闭文件以便显示“拒绝权限”。
我的英语很差。希望这可以帮到你。