我有一个文本文件,让我们调用它C:\to_run.txt.我希望我的Autohotkey脚本以这样的方式"监听"此文件,当它检测到更改时,它会立即根据文件内容执行操作,然后再次将文件设置为空白.
我可以处理最后的部分,所以我真的要求一种有效的方法来检测文件更改?我说效率很高,因为我的Autohotkey脚本变得相当长,我不希望这个监听功能以任何方式挂起脚本的其余部分.
只需确保您运行的是最新版本的AHK.
要启动并运行它,首先下载这三个脚本并将它们保存到/ lib文件夹中.
之后,只需指向您想要查看的位置,提供回调函数,如果需要,可以使用第三个参数来监视特定的更改.有关完整文档,请参阅此论坛帖子.
如果将此脚本放在其自己的文件夹中,保存并运行它,然后再次保存,它应检测对该脚本文件的更改.
#Persistent
WatchDirectory(A_ScriptDir "\|.ahk\", "Callback", 0x10)
return
Callback(param1, param2) {
msgBox % param1 "`n" param2
}
Run Code Online (Sandbox Code Playgroud)
但请注意,每次更改文件时都会触发两次.这似乎是我可以收集的Windows行为.
假设我们真的只在检查一个文件:确实不如Sidola的回答那么漂亮,但是不需要外部库:
#persistent
lastFileContent := ""
setTimer, checkFile, 20
return
checkFile:
fileread newFileContent, changingDocument.txt
if(newFileContent != lastFileContent) {
lastFileContent := newFileContent
msgbox, content changed to: %newFileContent%
}
return
Run Code Online (Sandbox Code Playgroud)
在这种情况下,要检查较大的文件,最好比较MD5-checksum而不是整个文件内容。
注意:我尚未测试对性能的影响。该脚本每秒打开文件50次,可能会消耗大量硬盘。