使用CreateFile检查独占写访问

时间:2014-03-12 03:33:44

标签: c++ windows winapi createfile

我需要检查文件的独占写访问权限。我输入了这段代码。

HANDLE fileH = CreateFile(filePath,
            GENERIC_READ | GENERIC_WRITE,
            0, // For Exclusive access
            0,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

if (fileH != INVALID_HANDLE_VALUE) {
    // We have exclusive write access.
    CloseHandle(fileH);
}
else {
    // No exclusive write access.
}

即使是在其他地方以共享读取模式打开的文件,也会导致文件被打开。虽然这是我想要的结果,但CreateFile API的这种行为是否正确?或者我应该只指定GENERIC_WRITE而不是(GENERIC_READ | GENERIC_WRITE)?

1 个答案:

答案 0 :(得分:2)

如果您只想要写访问权限,那么您也可以只指定GENERIC_WRITE

由于您指定要进行独占访问,因此如果打开了另一个文件句柄,则该调用将失败。当具有FILE_SHARE_READ共享模式的另一个句柄存在时,您说函数调用正在成功。但你错了。在这种情况下,您问题中对CreateFile的调用失败。


根据评论,听起来您希望将文件打开以进行独占访问,与打开文件的其他方一起使用。这是不可能的。排他性意味着排除所有其他人。当您独占打开文件时,意味着您的文件是该文件的唯一打开句柄。