Je voudrais construire en Perl sous Windows un chien de garde pour un Hot-Folder (je pourrais l'appeler Folder-Watch ou, hmm, probablement beaucoup mieux: un Hot-Dog). Jusqu'à présent, j'ai réussi à faire exactement cela, avec Win32::ChangeNotify
(voir l'exemple ci-dessous).Découvrez en Perl et Windows si un fichier est accessible en écriture/amovible
Mais comme vous pouvez le deviner à lire le code source, je suis tombé sur un problème lorsque le processus mobile veut terminer lorsque la copie/création de processus du fichier dans $watchdir
n'a pas fini (Aucun fichier ou répertoire).
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 =();
}
}
est-il un moyen de trouver automatiquement si le fichier est prêt à aller, à savoir a été finalement créé/copié?
Je pensais à quelque chose comme
while (1) {
move $file if (-w $file) # writeable
wait(1)
}
mais cela ne semble pas fonctionner sous Windows. J'ai besoin de résoudre cela sous Windows ainsi que Perl. À part cela, je suis ouvert aux suggestions.
Hmm, peut-être en vérifiant si je peux ouvrir le fichier avec un handle de fichier ...!? –
'sub writeable {ouvre mon $ fh," >> ", shift}' ':)' –
Je ne sais pas pourquoi vous pensez que '-w' devrait vous dire que personne n'écrit dans un fichier. Il y a peut-être des moyens spécifiques à l'OS de vérifier si un fichier est utilisé, mais je ne suis pas au courant. – ikegami