【发布时间】:2014-04-15 23:53:52
【问题描述】:
我需要检查文件的独占写访问权限。我输入了这段代码。
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)?
【问题讨论】:
-
参考示例代码:
INVALID_HANDLE_VALUE表示CreateFile操作失败。如果您正在检查独占写入访问权限,您应该测试:INVALID_HANDLE_VALUE和GetLastError() == ERROR_SHARING_VIOLATION。否则,示例代码可能会产生误报。
标签: c++ windows winapi createfile