bonjour,
je souhaite faire une application qui copie des fichier une fois qu'il sont déplacés dans un répertoire , mais comment détecter si un fichier est entièrement copié ou bien qu'il es en cours de copie ?
bonjour,
je souhaite faire une application qui copie des fichier une fois qu'il sont déplacés dans un répertoire , mais comment détecter si un fichier est entièrement copié ou bien qu'il es en cours de copie ?
Tu devrais regarder autour de FindFirstChangeNotification qui te permettra (dans un thread) d'attendre une sorte d'évènement (pas à la notion delphi), soit qu'il ne se passe rien (TimeOut), soit qu'un fichier a été modifié
Pour voir la copie d'un fichier, je pense qu'il faut écoute les messages de modification, ajouter le fichier dans une liste (si il existait déjà c'est que une modification, sinon c'est une copie d'un nouveau fichier, tu peux générer la liste au démarrage de l'application avec FindFirst/FindNext) ... et dès que le message TimeOut survient c'est que la copie est terminée ... tu peux aussi vérifier la taille du fichier voir ICI mes classs TNotifyShaiFileChangeThread et TFileSizeList, qui pourrait t'inspirer à ce sujet
oui mais on à accès juste si c'est notre application qui effectue la copie .
mais si on fait une copie externe , notre application ne peux pas savoir l'évolution de cette copie externe ? est ce que le fichier est entier ou non ?
Que veux tu dire ?
Personnellement, j'utilise ce code pour surveiller des fichiers log d'une appli (externe) pour afficher ceci dans une fenêtre de mon programme ...
Il n'y a pas de limitation de processus ...
Si un fichier est copié dans le répertoire surveillé par FindFirstChangeNotification en FILE_NOTIFY_CHANGE_SIZE, cela génère un résultat WAIT_OBJECT_0 (valeur d'attente qui signifie que l'action attendu est arrivée), puis tu dois scruter le répertoire avec FindFirst/FindNext, pour trouver le nouveau fichier, tu répètes l'action plusieurs fois et tant que la taille du fichier est différente de la précédente tu attends, et lorsque la taille ne bouge plus, tu peux considérer la copie comme terminée ... je pense qu'il existe même des API plus précises à ce suje, tu devrais essayer le code que j'ai mis ICI
le problème c'est que FILE_NOTIFY_CHANGE_SIZE se déclenche au debut et à la fin de la copie . et le create qu'en debut . donc avec notify change size tu recoit l'envenement deux fois quand il es copié par une application externe , et donc tu fais deux fois la copie du meme fichier avec ton application !!!!
apparament il n y a aucun moyen pour détecter si un fichier est en cours de chargement ou qu'il es entièrement copié .
J'ignore le délai de rapidité que tu souhaites avoir, mais tu peux comme je te l'ai dit, ajouter ce fichier à la liste de fichier nouveau à surveiller, et à partir de là, tu vérifie sa taille, et si cette dernière ne bouge plus pendant un délai de 30s, tu peux considérer la copie comme terminée, c'est n'est l'idéal mais c'est déjà une idée ...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager