You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下如何在文件被其他进程释放锁定后立即打开文件

ReadDirectoryChangesW 监听文件事件的锁冲突问题

我在程序中调用ReadDirectoryChangesW监听指定目录的文件事件,存在的问题是部分事件(例如FILE_ACTION_ADDED)在文件被打开而非关闭时触发,这意味着文件会在一段不确定时长内被其他进程锁定,此时调用CreateFileW会返回错误。

我想要实现的是在其他进程操作完成该文件后再打开它,我可以容忍竞态条件(例如其他进程在文件关闭后、我执行打开操作前将其删除的情况),但希望避免忙等。

目前我已了解或考虑过的方案如下:

  • 异步CreateFileW:这原本是最理想的方案,但不可行——所有用户态的文件打开API在设计上都是同步的。
  • 监听FILE_NOTIFY_CHANGE_LAST_ACCESS事件:该方案几乎可用,但仅当其他进程向文件写入了内容时,才会发送文件关闭的通知。
  • 内核过滤驱动方案:我查阅到部分内核过滤驱动相关资料,这类驱动可以检测文件关闭事件,理论上可行,但实现复杂度较高。
  • 忙等循环调用CreateFileW直至调用成功:该方案会占用过多CPU资源,但却是目前唯一实际可行的方案,我担心只能采用该方案。

内容的提问来源于stack exchange,提问作者Maciej Dziuban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:15:03