windows 文件监听 ReadDirectoryChangesW

我要疯了😱


先看下 linux inotifywait -m . 关于 vim 操作文件a 的输出结果


... 

./ MODIFY .a.swp
./ CREATE 4913 
./ OPEN 4913
./ ATTRIB 4913
./ CLOSE_WRITE,CLOSE 4913
./ DELETE 4913
./ MOVED_FROM a
./ MOVED_TO a~
./ MODIFY .a.swp
./ MODIFY .a.swp
./ CREATE a
./ OPEN a
./ MODIFY a
./ CLOSE_WRITE,CLOSE a
./ ATTRIB a
./ ATTRIB a
./ MODIFY .a.swp
./ DELETE a~
./ MODIFY .a.swp

出现了对我而言很奇怪的信息 4913(多问一句,为什么会连续出现多次 OPEN a; CLOSE a)

好了,现在看 windows

同样是使用 vim(msys2)

使用 watchdog 监听

代码来自 https://blog.csdn.net/luanpen...

没有改动任何地方(除了监听目录)

watchdog 输出结果,这是我要的结果

文件改变:./debug.info~
文件改变:./.debug.info.swp
文件改变:./debug.info
文件改变:./debug.info
文件改变:./debug.info

watchdog 所使用的 ReadDirectoryChangesW 函数的参数(./src/watchdog/observers/winapi.py:125) 和 c++ 是一样的

接下来看 c++ ReadDirectoryChangesW

c++ 代码取自 https://blog.csdn.net/liang84... 中的 线程函数: WatchChanges(LPVOID lpParameter)

未做核心改动

输出结果

type: 1(FILE_ACTION_ADDED)      change file: 4913
type: 2(FILE_ACTION_REMOVED)    change file: 4913

目前感到好奇的点就是: windows(py + c++) == linux(inotifywait)

现在在windows 上不使用 vim,换用 notepad

输出结果

type: 3(FILE_ACTION_MODIFIED)   change file: debug.info

对文件的所有操作都是写操作。

我心中有一个大写的WHY

所以 c++ 为什么不能获得我想要的结果,该如何解决它。对了,那个 c++ 代码和微软官网是一样的,所以博客多数是从微软那copy 来的。

不幸的是我再也无法在微软那找到那个页面


题外话:

关于 vim 的 4913 文件,我在当前目录创建同名文件,vim将使用另一个文件: 5036

type: 1(FILE_ACTION_ADDED)      change file: 5036
type: 2(FILE_ACTION_REMOVED)    change file: 5036

所以这是为了什么😅

阅读 5.3k
1 个回答

我也不知道这是为什么,因为我没有复现。猜测这个数字是 Vim 进程的 pid。可能是插件在做什么事。你使用 vim --clean 再试试?

PS: 这和 Windows、ReadDirectoryChangesW 有什么关系么?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题