http://www.perlmonks.org?node_id=872118


in reply to Re^2: File::Monitor problem with batch files
in thread File::Monitor problem with batch files

Actually, I looked at the module and the package name is

package Win32::ReadDirectoryChanges;

The bareword errors were probably because of the incorrect package name. Change the name of the module you copied and pasted to Win32::ReadDirectoryChanges (without the W).

Try to change the code to:

use strict; use warnings; use File::Copy::Recursive qw(fcopy rcopy dircopy fmove rmove dirmove); use Win32::ReadDirectoryChanges; my $path = 'c:\\PAPER'; my $subtree = 1; my $filter = FILE_ACTION_ADDED | FILE_ACTION_MODIFIED; my $rdc = Win32::ReadDirectoryChanges->new(path => $path, subtree => 1, filter => $filter); my @results = $rdc->read_changes; while (scalar @results) { my ($action, $filename) = splice(@results, 0, 2); if ($action == FILE_ACTION_ADDED || $action == FILE_ACTION_MODIFIED +) { # perform your backup here fcopy ("$filename","p:\\phdpaper"); } }

Replies are listed 'Best First'.
Re^4: File::Monitor problem with batch files
by xbmy (Friar) on Nov 18, 2010 at 17:08 UTC

    I have tried other filters like:

    FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_ACTION_MODIFIED

    But they all work not well, I m trying the other filters.

    I also got a wrong message when I ran the code you post to me:

    Character in 'C' format wrapped in pack at c:/Perl/site/lib/Win32/ReadDirectoryChanges.pm line 214.

    I don't know how to treat it. I really want the code to work, it will be a great help to my paper composition.

    Thanks!

Re^4: File::Monitor problem with batch files
by xbmy (Friar) on Nov 18, 2010 at 15:53 UTC

    Thanks! But it just work on the tmp file, which was automatically added after i saved a .doc file by microsoft word, but there was no copying action for the original .doc file after i modified it and saved.

    Whats wrong? Pleas hint.

Re^4: File::Monitor problem with batch files
by xbmy (Friar) on Nov 18, 2010 at 19:36 UTC

    How do you think the problem i asked for you? Actually, i tried the following codes using the file::monitor::delta package, finally, it worked very well!

    use File::Monitor; use File::Copy::Recursive qw(fcopy rcopy dircopy fmove rmove dirmove); my $monitor = File::Monitor->new(); # Watch some files for my $file (qw( 1.doc 2.xls)) { $monitor->watch( $file ); } # First scan just finds out about the monitored files. No changes # will be reported. #$object->scan; while (1) { $monitor->scan; sleep 10; # After the first scan we get a list of File::Monitor::Delta objec +ts # that describe any changes my @changes = $monitor->scan; for my $change (@changes) { # Call methods on File::Monitor::Delta to discover what change +d if ($change->is_mtime) { my $name = $change->name; my $old_mtime = $change->old_mtime; my $new_mtime = $change->new_mtime; print "$name changed at $new_mtime\n"; fcopy ("$name","p:\\phdpaper"); #backup automatically for +the file which just has been modified } } }

    Thank you for your help!