运行该程序的Windows用户帐户是计算机上的管理员。根据用户的错误“刚刚开始发生”。
同样,文件已创建并且似乎具有正确的权限和所有权。用fopen打开文件并用fwrite写入。
为什么会发生错误? 这与团体政策有关吗? 我从哪里开始看?
[2015-01-28更新]
代码返回错误:
m_stream = fopen(m_sLogFile, m_sMode);
if ( m_stream == NULL )
{
dwErrorCode = ::GetLastError();
if (dwErrorCode != ERROR_ALREADY_EXISTS &&
dwErrorCode != ERROR_SUCCESS)
{
CaptureError(this->FormatErrorCode (dwErrorCode));
return FALSE;
}
}
这是在创建文件之后......
hFile = CreateFile((LPCTSTR) sPathName, // file name
GENERIC_ALL, // access mode
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // SD
CREATE_ALWAYS, // how to create
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH |
FILE_FLAG_SEQUENTIAL_SCAN, // file attributes
NULL); // handle to template file
答案 0 :(得分:0)
你在滥用GetLastError
。您只能使用它来获取失败的Windows API函数的错误代码(并且仅用于那些文档GetLastError
可用于获取错误代码的API函数)。您无法可靠地使用它来获取有关失败的C标准库函数的更多信息。相反,您需要使用由C标准定义的接口,即Hans Passant在其评论中所使用的errno
变量。
这里不能使用GetLastError
的原因是因为C库函数可能需要进行多个Windows API函数调用才能实现该函数。无法保证最后调用的API会在整体操作的上下文中生成有意义的错误代码。例如,如果超过C运行时实现支持的打开文件数,也可能不会调用API。