2 votes

JAVA NIO Watcher : Comment détecter la fin d'une opération de longue durée (copie) ?

Je dois effectuer une action ZIP sur un fichier fraîchement introduit dans un répertoire. Là, je souscris à l'événement CREATE, qui est déclenché. L'opération de copie dans ce répertoire prend un certain temps.

J'obtiens donc ACCESS_DENIED, "verrouillé par un autre processus" lors de l'accès au fichier.

NIO fournit-il quelque chose comme "LOCK Released" ou dois-je interroger le fichier pour que le verrou soit libéré ? Comme décrit ici :http://stackoverflow.com/questions/750471/how-to-know-whether-a-file-copying-is-in-progress-complete-in-java-1-6

Merci pour toute aide.

Gerd

1voto

irreputable Points 25577

Copier le fichier dans un autre répertoire ; une fois que c'est fait, le déplacer dans le répertoire surveillé.

java.nio.file.Files.move(srcFile, targetFile, StandardCopyOption.ATOMIC_MOVE);

l'observateur verra un événement CREATE

0voto

Modifiez l'opération de copie de façon à ce qu'un fichier supplémentaire de petite taille soit écrit dans le même répertoire, après l'écriture du premier fichier de grande taille. Le nom du fichier pourrait être le nom du fichier original, plus une extension.

Votre observateur recherchera les fichiers portant cette extension, la coupera pour obtenir le nom de fichier original, puis lancera l'action Zip.

Une autre possibilité serait que votre opération de copie écrive un fichier avec une extension différente de celle que vous recherchez. Une fois l'opération terminée, elle renomme le fichier pour lui donner l'extension correcte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X