【问题标题】:Monitoring for changes in folder without continuously running在不连续运行的情况下监视文件夹中的更改
【发布时间】:2015-10-10 05:21:19
【问题描述】:
这个问题已经被问过好几次了。像 Dropbox 这样的许多程序利用某种形式的文件系统 api 交互来即时跟踪受监控文件夹中发生的更改。
然而,据我了解,这需要一些守护进程始终在线以等待来自文件系统 api 的回调。但是,我可以关闭 Dropbox,更新文件和文件夹,当我再次启动它时,它仍然可以知道我对文件夹所做的更改。这怎么可能?它是否会彻底搜索整棵树以寻找更新?
【问题讨论】:
标签:
filesystems
dropbox
filesystemwatcher
【解决方案1】:
简短的回答是肯定的。
我们以 Google Drive 为例,因为它的本地数据库没有加密,很容易看出发生了什么。
基本上,它会保留 Google Drive 文件夹的快照。
您可以使用DB browser for SQLite 浏览snapshot.db(通常在%USER%\AppData\Local\Google\Drive\user_default 下)。
这是我电脑上的一个示例:
您会看到它跟踪(以及其他内容):
每当 Google Drive 启动时,它都会查询您“Google Drive”文件夹下的所有文件和文件夹(您可以使用 Procmon 查看)
请注意,更改也可以从服务器同步
还有Change Journals,但我认为Dropbox或GDrive不会使用它:
为避免这些缺点,NTFS 文件系统维护一个更新序列号 (USN) 更改日志。当对卷中的文件或目录进行任何更改时,该卷的 USN 更改日志会更新,其中包含更改说明以及文件或目录的名称。