Блокировка файла на запись
От: maks1180  
Дата: 12.08.20 00:20
Оценка:
Нужно открыть хэндл на запись и запретить писать другим, но разрешить другим читать. Делаю так:

HANDLE f1 = ::CreateFile(path, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

// здесь получаю ошибку ERROR_SHARING_VIOLATION
HANDLE f2 = ::CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

Что делаю не так ?
===============================================
(реклама, удалена модератором)
Re: Блокировка файла на запись
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 12.08.20 04:20
Оценка: 11 (1) +1
Здравствуйте, maks1180, Вы писали:


M>HANDLE f1 = ::CreateFile(path, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);


M>// здесь получаю ошибку ERROR_SHARING_VIOLATION

M>HANDLE f2 = ::CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

M>Что делаю не так ?



А погуглить? Буквально первая же ссылка — https://docs.microsoft.com/en-us/windows/win32/fileio/creating-and-opening-files

First call to CreateFile Valid second calls to CreateFile
......
GENERIC_WRITE, FILE_SHARE_READ GENERIC_READ, FILE_SHARE_WRITE
GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE
Идея в том, что ты при втором открытии должен разрешить шаре райт, так как ты уже открыл его на запись.

Если у тебя один писатель/один читатель, то просто GENERIC_X и FILE_SHARE_Y — X/Y должны поменяться местами
Маньяк Робокряк колесит по городу
Отредактировано 12.08.2020 4:26 Marty . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.