2016-08-05 98 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