У меня есть приложение, в котором я использую 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