我有一个main.c函数和一个在其中调用的子函数。在子功能中,我使用CreateFile
来制作文件。然后我使用CloseHandle
关闭该文件的句柄。当我在那之后使用fopen_s
(在子函数内)时,它适用于读取和写入模式。但是如果我之后在main函数中使用fopen_s
,我只能打开读访问权限,否则我会收到错误代码13 - 权限被拒绝。我的CreateFile函数的参数如下:
hAppend = CreateFile(centralDataFilepath, // open central data file
FILE_APPEND_DATA, // open for writing
FILE_SHARE_READ|FILE_SHARE_WRITE, // allow multiple readers
NULL, // no security
OPEN_ALWAYS, // open or create
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
我使用fopen_s
如下:
FILE *f2;
errno_t errorCode3 = 0;
errorCode3 = fopen_s(&f2, centralDataFilepath, "a+");
fclose(f2);
我实际上并不知道CreateFile是否与此有关,似乎退出子功能后文件的权限会发生变化?我需要能够写入此文件,是否有人知道我为什么会收到此权限被拒绝错误,以及如何修复它?
答案 0 :(得分:2)
如上所述here:
fopen_s
和_wfopen_s
打开的文件不可共享。
功能失败,因为它无法锁定文件以进行写入。您需要使用_fsopen
代替。试试这个:
f2 = _fsopen(centralDataFilepath, "a+", _SH_DENYNO);