Win32-changenotify and modifying a file

Hey!

I’m working with win32-changenofity library to listen for any changes in
a directory. I’m interested in added, deleted and modified files. That’s
my code:

#-------
filter = ChangeNotify::FILE_NAME | ChangeNotify::DIR_NAME
abs_path = File.expand_path(dir)
ChangeNotify.new(abs_path, true, filter) do |cn|
cn.wait do |events|
events.each do |event|
puts(event.action, event.file_name)
end
end
end
#--------

The problem is when I modify file on disk, it’s not reported. When I use
additional filters like SIZE or LAST_WRITE I get changes reported few
times. Is there some combination which will report file change only
once?

Hi,
----- Original Message -----
From: “Tomek P.” [email protected]
Newsgroups: comp.lang.ruby
To: “ruby-talk ML” [email protected]
Sent: Tuesday, April 15, 2008 9:45 PM
Subject: win32-changenotify and modifying a file

cn.wait do |events|


It’s a feature of ChangeNotify.
You could filter duplicate event like this:

filter = ChangeNotify::FILE_NAME | ChangeNotify::DIR_NAME |
ChangeNotify::LAST_WRITE
abs_path = File.expand_path(dir)
pre_event = nil
ChangeNotify.new(abs_path, true, filter) do |cn|
cn.wait do |events|
events.each do |event|
next if [event.action,event.file_name] == pre_event
pre_event = [event.action,event.file_name]
puts(event.action, event.file_name)
end
end
end

Regards,

Park H.

Park H. wrote:

   pre_event = [event.action,event.file_name]
   puts(event.action, event.file_name)
 end

end
end

And what if I modify same file two times in a row? I could count events,
as there are 4 for modification. Wouldn’t it be better to use
changejournal and filter in only “close” actions?