Смотреть файл (ы) для модификации алгоритма - PullRequest
1 голос
/ 01 ноября 2010

Мне было просто интересно, как реализованы алгоритмы просмотра файлов.Например, скажем, я хочу применить фильтр (т. Е. Искать / заменить строку) к файлу каждый раз, когда он изменяется, какой метод я должен использовать?Очевидно, я мог бы запустить бесконечный цикл, который проверял бы каждый файл в каталоге на наличие изменений, но это могло бы быть не очень эффективно.Есть ли способ получить уведомление непосредственно от операционной системы?Для демонстрации, давайте предположим, что * nix ОС и любой другой язык (C / Ruby / Python / Java / etc.).

Ответы [ 4 ]

5 голосов
/ 01 ноября 2010

Linux имеет inotify , и, судя по ссылкам в Википедии, в Windows есть нечто похожее, называемое «Управление каталогами».Без чего-то вроде inotify вы можете только опросить.

2 голосов
/ 01 ноября 2010

В Linux есть подсистема Inotify , которая предупредит вас об изменении файла.

1 голос
/ 01 ноября 2010

Существуют оболочки для 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 , но я не смог придумать такой краткий пример, как приведенный выше.

1 голос
/ 01 ноября 2010

JavaSE 7 будет иметь Уведомление об изменении файла как часть обновлений NIO.2.

...