C-fopen_s无法写入CreateFile创建的文件
我有一个main.c函数和在其中调用的一个子函数。在子函数中,我使用了C-fopen_s无法写入CreateFile创建的文件,c,fopen,createfile,C,Fopen,Createfile,我有一个main.c函数和在其中调用的一个子函数。在子函数中,我使用了CreateFile生成文件。然后我使用CloseHandle关闭该文件的句柄。之后(在子功能中)使用fopen_s时,它可以在读取和写入模式下工作。但是如果我在之后的主功能中使用fopen_s,我只能以读访问权限打开,否则我会得到错误代码13-权限被拒绝。my CreateFile函数的参数如下: hAppend = CreateFile(centralDataFilepath, // open central data f
CreateFile
生成文件。然后我使用CloseHandle
关闭该文件的句柄。之后(在子功能中)使用fopen_s
时,它可以在读取和写入模式下工作。但是如果我在之后的主功能中使用fopen_s
,我只能以读访问权限打开,否则我会得到错误代码13-权限被拒绝。my 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
FILE *f2;
errno_t errorCode3 = 0;
errorCode3 = fopen_s(&f2, centralDataFilepath, "a+");
fclose(f2);
我使用的fopen\u s
如下:
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
FILE *f2;
errno_t errorCode3 = 0;
errorCode3 = fopen_s(&f2, centralDataFilepath, "a+");
fclose(f2);
我不知道CreateFile是否与此有关,似乎在我退出子函数后文件的权限会发生变化?我需要能够写入此文件,有人知道我为什么会收到此权限被拒绝错误,以及如何修复它吗?如前所述:
由fopen\u s
和\wfopen\u s
打开的文件不可共享
函数失败,因为它无法锁定文件进行写入。您需要改用\u fsopen
。试试这个:
f2 = _fsopen(centralDataFilepath, "a+", _SH_DENYNO);
如上所述:
由fopen\u s
和\wfopen\u s
打开的文件不可共享
函数失败,因为它无法锁定文件进行写入。您需要改用\u fsopen
。试试这个:
f2 = _fsopen(centralDataFilepath, "a+", _SH_DENYNO);
如果您使用了
CreateFile
,为什么不同时使用WriteFile
函数?请不要描述您的代码。显示有效的代码,并显示无效的代码。请阅读以下内容:。如果您使用了CreateFile
,为什么不同时使用WriteFile
函数?请不要描述您的代码。显示有效的代码,并显示无效的代码。请阅读以下内容:。fsopen在我使用标记“r”时起作用,但不用于使用“r+”进行更新……似乎仍然存在某种共享问题。有什么想法吗?@Chaz:我已经测试过这个问题。首先调用CreateFile
,然后在同一个文件上调用\u fsopen
“r+”,这样就可以了。请共享您的代码,这不起作用。_fsopen在我使用标记“r”时起作用,但不用于使用“r+”进行更新……似乎仍然存在某种共享问题。有什么想法吗?@Chaz:我已经测试过这个问题。首先调用CreateFile
,然后在同一个文件上调用\u fsopen
“r+”,这样就可以了。请分享你的代码,那不行。