2016-08-05 92 views
1

我搜索MSDN约是否有该函数CreateFile返回INVALID_HANDLE_VALUE和GetLastError()返回ERROR_ALREADY_EXISTS

HANDLE WINAPI CreateFile(
    _In_  LPCTSTR    lpFileName, 
    _In_  DWORD     dwDesiredAccess, 
    _In_  DWORD     dwShareMode, 
    _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, 
    _In_  DWORD     dwCreationDisposition, 
    _In_  DWORD     dwFlagsAndAttributes, 
    _In_opt_ HANDLE    hTemplateFile 
); 

如果dwCreationDisposition == CREATE_ALWAYSOPEN_ALWAYS,它说

创建一个新的情况文件,永远。如果指定的文件存在并且为 可写,则函数覆盖文件,函数成功,并且最后一个错误代码被设置为ERROR_ALREADY_EXISTS(183)。如果指定的 文件不存在并且是有效路径,则会创建一个新文件, 函数成功,并且最后一个错误代码被设置为零。有关更多 信息,请参阅本主题的“备注”部分。

打开一个文件,始终。如果指定的文件存在,功能 成功,并且最后的错误代码设置为ERROR_ALREADY_EXISTS(183)。 如果指定的文件不存在并且是可写 位置的有效路径,则该函数会创建一个文件,并且最后一个错误代码将 设置为零。

所以我不确定如果功能失败,GetLastError()ERROR_ALREADY_EXISTS

请给我一个例子,如果是的话。

非常感谢。

回答

2

快速回答:号

根据什么规定:

ERROR_ALREADY_EXISTS应由GetLastError()一个CreateFile()呼叫只有当该文件存在,dwCreationDisposition设置为CREATE_ALWAYSOPEN_ALWAYS和之后立即返回CreateFile()成功

如果CreateFile()失败CREATE_ALWAYSOPEN_ALWAYS设置为dwCreationDisposition,然后GetLastError()将返回指示文件为什么不能打开的原因适当的最后一个错误代码,但不能ERROR_ALREADY_EXISTS为用户特别要求打开或创建该文件,无论它是否存在。

当与dwCreationDisposition设置为CREATE_NEW由于文件存在而失败时,这不应与GetLastError()的返回值相混淆。在这种情况下,GetLastError()将返回ERROR_FILE_EXISTS从不ERROR_ALREADY_EXISTS