Сбой CreateFile из-за SHARIN_VIOLATION, потому что его использует какой-то другой процесс ОС - PullRequest
0 голосов
/ 15 октября 2018

У меня есть приложение, в котором я использую ReadDirectoryChanges для отслеживания изменений в каталоге.Если какой-либо новый файл будет создан, изменен или удален, я получу уведомление.Как только я получаю уведомление, я использую API CreateFile, чтобы открыть файл с флагом OPEN_EXISTING, использую дескриптор для вызова других API Windows для получения атрибутов файла.То, как я называю CreateFile

CreateFile(path,GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL ,
NULL );

Но иногда я получаю Error 32, который сообщает о нарушении, то есть файл используется каким-то другим процессом, поэтому мое приложение не может получить к нему доступ.

Я добавил sleep из 100ms перед вызовом API, и он работал нормально, так как к этому времени другой процесс освободил файл (или закрыл дескриптор).Но я не хочу добавлять явный сон, и я не уверен насчет времени сна, оно может отличаться в разных средах.Это время основано на пробах и ошибках

Я также пытался непрерывно опрашивать / вызывать CreateFile, пока он не преуспеет, но он использует ресурсы и не является хорошим решением.

Естьесть ли способ, которым я могу wait на CloseHandle, так что я могу тогда CreateFile, или есть ли способ, которым я могу avoid the error code 32

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...