C-fopen_s无法写入CreateFile创建的文件

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

我有一个main.c函数和在其中调用的一个子函数。在子函数中,我使用了
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+”,这样就可以了。请分享你的代码,那不行。