我要疯了😱
先看下 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
所以这是为了什么😅
我也不知道这是为什么,因为我没有复现。猜测这个数字是 Vim 进程的 pid。可能是插件在做什么事。你使用
vim --clean
再试试?PS: 这和 Windows、ReadDirectoryChangesW 有什么关系么?