我只是想知道文件监视算法是如何实现的。例如,假设我想在每次修改时将过滤器(即搜索/替换字符串)应用于文件,我应该使用什么技术?显然,我可以运行一个无限循环来检查目录中的每个文件是否有修改,但它可能效率不高。有没有办法直接通过操作系统获得通知?为了演示,让我们假设一个* nix操作系统和任何语言(C / Ruby / Python / Java /等)。
答案 0 :(得分:5)
Linux有inotify,从维基百科链接来看,Windows有类似的“目录管理”。没有像inotify这样的东西,你只能轮询..
答案 1 :(得分:2)
在Linux中有Inotify子系统,它会提醒您修改文件。
答案 2 :(得分:1)
JavaSE 7将File Change Notification作为NIO.2更新的一部分。
答案 3 :(得分:1)
有一些inotify包装器可以让它从高级语言中轻松使用。例如,在ruby中,您可以使用rb-inotify执行以下操作:
notifier = INotify::Notifier.new
# tell it what to watch
notifier.watch("path/to/foo.txt", :modify) {puts "foo.txt was modified!"}
notifier.watch("path/to/bar", :moved_to, :create) do |event|
puts "#{event.name} is now in path/to/bar!"
end
还有pyinotify但我无法提出一个如上所述简洁的例子。