gpt4 book ai didi

c - 在 C 中重命名 .dat 文件时权限被拒绝

转载 作者:行者123 更新时间:2023-11-30 15:05:30 25 4
gpt4 key购买 nike

我编写了这个函数来删除fguest文件的一条记录。它会工作几次,但经过几次尝试后,它开始显示权限被拒绝..我无法弄清楚这是什么原因,有人可以告诉我这是什么原因吗?

void delResPer(void)
{
int recFound;
char status[50] = " ResDeleted ";

printf("\nPlease enter Guest's ID to search: ");
if(scanf("%s",&search) != 1)
{
invalidInput();
flushStdin();
editRes();
}
flushStdin();

fguest = fopen(guestFile,"rb");
if (fguest == NULL)
{
printf("Unable to locate guestFile\n\n");
returnToMain();
}
while(fread(&grec,sizeof(GUEST),1,fguest)==1)
{
if (strcmp(grec.id,search)==0)
{
printf("\n\n\nRecord found: \n");
printf("\nGuest\'s ID\t\t: %s",grec.id);
printf("\nGuest\'s Name\t\t: %s",grec.name);
printf("\nRoom\'s Type\t\t: %d",grec.r_type);
checked(grec.r_type);
recFound = 1;
}
}


if ( recFound != 1)
{
printf("No matching record found..\n");
printf("Please retry with a valid record..\n");
printf("Page is refreshing..");
Sleep(500);
editRes();
}

else if ( recFound == 1)
{
printf("\n\nDelete the record (Y/N)?");
cfm = getchar();
flushStdin();
if ( cfm == 'Y' || cfm == 'y')
{
ftemp = fopen(tempFile,"wb+");
rewind(fguest);
while(fread(&grec,sizeof(grec),1,fguest)==1)
{
if (strcmp(grec.id,search)!=0)
{
fseek(ftemp,0,SEEK_CUR);
fwrite(&grec,sizeof(grec),1,ftemp);
}
}
fclose(fguest);
fclose(ftemp);
if(remove(guestFile)!=0)
{
errnum = errno;
fprintf(stderr,"Failed to remove guestFile :: %s\n",strerror( errnum ));
Sleep(500);
//printf("Program is exiting..");
//return;
}
if(rename(tempFile,guestFile)!=0)
{
errnum = errno;
fprintf(stderr,"Failed to rename guestFile :: %s\n",strerror( errnum ));
Sleep(500);
printf("Program is exiting..");
return;
}
if (check == 1 )
SpDeluxe++;
else if (check == 2 )
Deluxe++;
else if (check == 3 )
Premium++;
else if (check == 4 )
Basic++;
refreshRoomAvail();
printf("Record is deleted successfully..\n");
Sleep(250);
returnToMain();
}

else if ( cfm == 'N' || cfm == 'n')
{
printf("Deletion of record is cancelled\n");
printf("Page is refreshing..");
Sleep(500);
editRes();
}

else
{
invalidInput();
editRes();
}
}
}

最佳答案

您的文件句柄已用完。

fguest 在函数的顶层打开,但仅在 cfm == 'Y' || 的分支中关闭cfm == 'y'。如果不满足该条件,或者从未达到该代码(例如,因为 recFound != 1),则文件将保持打开状态。

您需要在函数退出之前始终关闭文件。

关于c - 在 C 中重命名 .dat 文件时权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39813343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com