Мне нужно проверить на эксклюзивный доступ для записи файла. Я вставил в этот код.
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.
}
Даже для файлов, которые открыты в режиме совместного чтения в другом месте, это приводит к открытию файлов. Хотя это результат, который я хотел, но правильно ли это поведение API CreateFile? Или я должен указать только GENERIC_WRITE вместо (GENERIC_READ | GENERIC_WRITE)?
Если вам нужен только доступ для записи, вы можете указать только GENERIC_WRITE
,
Поскольку вы указываете, что хотите монопольный доступ, этот вызов не будет выполнен, если для открытия файла есть другой дескриптор. Вы говорите, что вызов функции успешен, когда существует другой дескриптор с FILE_SHARE_READ
поделиться режимом. Но вы ошибаетесь. В этом сценарии вызов CreateFile
в твоем вопросе не получается.
Согласно комментариям звучит так, будто вы хотите, чтобы файл был открыт для монопольного доступа, одновременно с открытием файла другими сторонами. Это невозможно. Исключительные средства для исключения всех остальных. Когда у вас есть файл, открытый исключительно, это означает, что ваш единственный открытый дескриптор этого файла.
Других решений пока нет …