Использование 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.
}

Даже для файлов, которые открыты в режиме совместного чтения в другом месте, это приводит к открытию файлов. Хотя это результат, который я хотел, но правильно ли это поведение API CreateFile? Или я должен указать только GENERIC_WRITE вместо (GENERIC_READ | GENERIC_WRITE)?

-1

Решение

Если вам нужен только доступ для записи, вы можете указать только GENERIC_WRITE,

Поскольку вы указываете, что хотите монопольный доступ, этот вызов не будет выполнен, если для открытия файла есть другой дескриптор. Вы говорите, что вызов функции успешен, когда существует другой дескриптор с FILE_SHARE_READ поделиться режимом. Но вы ошибаетесь. В этом сценарии вызов CreateFile в твоем вопросе не получается.


Согласно комментариям звучит так, будто вы хотите, чтобы файл был открыт для монопольного доступа, одновременно с открытием файла другими сторонами. Это невозможно. Исключительные средства для исключения всех остальных. Когда у вас есть файл, открытый исключительно, это означает, что ваш единственный открытый дескриптор этого файла.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector