我想在 Windows 下的 Perl中为Hot-Folder构建一个Watch-Dog(我可以称它为Folder-Watch,或者,嗯,可能更好:一个Hot-Dog)。到目前为止,我成功地做到了这一点,(参见下面的示例)。Win32::ChangeNotify
$watchdir
但正如您可能会猜到阅读源代码时,当文件的复制/创建过程尚未完成(没有此类文件或目录)时,当移动过程想要完成时,我遇到了一个问题。
use Win32::ChangeNotifier;
use File::Copy qw(move);
my $notify = Win32::ChangeNotify->new($watchdir, 0, "FILE_NAME");
while (1) {
if ($notify->wait(1_000)) { # 1-second wait cycle
notify->reset;
@foundfiles = File::get_by_ext($watchdir, "csv"); # search and return files in $watchdir with extension "csv"
print "Something has happened! (del/ren/create)\n";
foreach (@foundfiles) {
move($watchdir.$_, $someotherdir.$_) or die "Fehler: $!";
}
@foundfiles = ();
}
}
有没有办法自动找出文件是否准备就绪,即最终是否已创建/复制?
我在想类似的东西
while (1) {
move $file if (-w $file) # writeable
wait(1)
}
但这似乎在 Windows 下不起作用。我需要在 Windows 和 Perl 下解决这个问题。除此之外,我愿意接受建议。