C - fopen_s无法写入CreateFile生成的文件

时间:2017-08-15 05:28:39

标签: c fopen createfile

我有一个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是否与此有关,似乎退出子功能后文件的权限会发生变化?我需要能够写入此文件,是否有人知道我为什么会收到此权限被拒绝错误,以及如何修复它?

1 个答案:

答案 0 :(得分:2)

如上所述here

  

fopen_s_wfopen_s打开的文件不可共享。

功能失败,因为它无法锁定文件以进行写入。您需要使用_fsopen代替。试试这个:

f2 = _fsopen(centralDataFilepath, "a+", _SH_DENYNO);