IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Comment détecter la copie d'un fichier ?


Sujet :

Delphi

  1. #1
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut Comment détecter la copie d'un fichier ?
    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 ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 581
    Points : 25 239
    Points
    25 239
    Par défaut
    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

  3. #3
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    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 ?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 581
    Points : 25 239
    Points
    25 239
    Par défaut
    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

  5. #5
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    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 !!!!

  6. #6
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    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é .

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 581
    Points : 25 239
    Points
    25 239
    Par défaut
    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 ...

Discussions similaires

  1. Comment détecter le type d'un fichier survolant un JPanel
    Par greg0ire dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/07/2007, 08h56
  2. Réponses: 11
    Dernier message: 23/06/2007, 00h32
  3. Comment détecter et empecher l'ouverture d'un fichier
    Par FremyCompany dans le forum Framework .NET
    Réponses: 2
    Dernier message: 11/03/2007, 20h35
  4. comment désactiver le copy des fichiers sur lan
    Par z7e7z dans le forum Développement
    Réponses: 4
    Dernier message: 09/01/2006, 10h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo