Windows下如何在文件被其他进程释放锁定后立即打开文件
ReadDirectoryChangesW 监听文件事件的锁冲突问题
我在程序中调用ReadDirectoryChangesW监听指定目录的文件事件,存在的问题是部分事件(例如FILE_ACTION_ADDED)在文件被打开而非关闭时触发,这意味着文件会在一段不确定时长内被其他进程锁定,此时调用CreateFileW会返回错误。
我想要实现的是在其他进程操作完成该文件后再打开它,我可以容忍竞态条件(例如其他进程在文件关闭后、我执行打开操作前将其删除的情况),但希望避免忙等。
目前我已了解或考虑过的方案如下:
- 异步
CreateFileW:这原本是最理想的方案,但不可行——所有用户态的文件打开API在设计上都是同步的。 - 监听
FILE_NOTIFY_CHANGE_LAST_ACCESS事件:该方案几乎可用,但仅当其他进程向文件写入了内容时,才会发送文件关闭的通知。 - 内核过滤驱动方案:我查阅到部分内核过滤驱动相关资料,这类驱动可以检测文件关闭事件,理论上可行,但实现复杂度较高。
- 忙等循环调用
CreateFileW直至调用成功:该方案会占用过多CPU资源,但却是目前唯一实际可行的方案,我担心只能采用该方案。
内容的提问来源于stack exchange,提问作者Maciej Dziuban
相关产品推荐
相关产品推荐

