我需要检查文件的独占写访问权限。我输入了这段代码。
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)?
答案 0 :(得分:2)
如果您只想要写访问权限,那么您也可以只指定GENERIC_WRITE
。
由于您指定要进行独占访问,因此如果打开了另一个文件句柄,则该调用将失败。当具有FILE_SHARE_READ
共享模式的另一个句柄存在时,您说函数调用正在成功。但你错了。在这种情况下,您问题中对CreateFile
的调用失败。
根据评论,听起来您希望将文件打开以进行独占访问,与打开文件的其他方一起使用。这是不可能的。排他性意味着排除所有其他人。当您独占打开文件时,意味着您的文件是该文件的唯一打开句柄。