监视文件以进行修改算法

时间:2010-11-01 14:10:50

标签: language-agnostic operating-system filesystems

我只是想知道文件监视算法是如何实现的。例如,假设我想在每次修改时将过滤器(即搜索/替换字符串)应用于文件,我应该使用什么技术?显然,我可以运行一个无限循环来检查目录中的每个文件是否有修改,但它可能效率不高。有没有办法直接通过操作系统获得通知?为了演示,让我们假设一个* nix操作系统和任何语言(C / Ruby / Python / Java /等)。

4 个答案:

答案 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但我无法提出一个如上所述简洁的例子。