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

C# Discussion :

Fin d'une opération de copie de fichier


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut Fin d'une opération de copie de fichier
    Bonjour à toutes et à tous

    Ma recherche: Quand windows copie un fichier dans un dossier, est-il possible de détecter la fin de la copie de ce fichier ?

    Voilà ce que je cherche à faire exactement.

    Mon application utilise un FileSystemWatcher pour surveiller l'ajout de fichiers dans un dossier.
    Une fois l'ajout de fichier détecté (par son extension), je dois passer ce fichier à une fonction d'une dll pour en extraire des informations.
    Le problème, c'est que le composant détecte l'ajout dès le début de la copie et non pas lorsque tout le fichier est déjà là.
    Ces fichiers pouvant être de grande taille et venir par le réseau (ce qui augmente d'autant l'attente de fin de copie), j'aimerais pouvoir détecter que le fichier est "complet" à son emplacement avant de le lire avec ma dll.

    Connaitriez-vous une astuce permettant de savoir que le fichier est entièrement présent ?

    Je précise que je n'ai aucune info sur la source des fichiers qui peuvent arriver par une simple copie autant que par transfert ftp. Je ne peux donc pas me baser sur la taille de départ de ces fichiers.


    Papy

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Par défaut
    Tu peux essayer d'ouvrir le fichier via un objet FileStream à intervalle régulier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FileStream fs = new FileStream
    (monFichier, FileMode.Open, FileAccess.Read, FileShare.None);
    Si la copie est terminée tu ne dois pas avoir d'exception, si elle est en cours tu attends avant un nouveau test...peut être pas le top mais bon...

    Edit:
    la problématique est évoquée sur ce post

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    C'est effectivement la solution que j'envisage si je ne trouve pas plus "pratique".

    Je dis pratique parce que ça ne doit pas bloquer le programme et que le FileSystemWatcher ne doit pas rester bloqué par ce test. Alors, j'aimerai ne pas avoir à threader cette attente de "fin de copie" en plus.

    Mais bon, s'il n'y a pas d'autre solution, c'est ce que je ferai.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    Salut,

    j'ai, moi également, été confrontée à ce problème...
    Je me suis créé une ptit méthode qui boucle sur des tentatives d'accès au fichier jusqu'à ce qu'il y arrive...
    j'ai fixé un certain nombre de tours de boucle afin de ne pas attendre indéfiniment... s'il est atteint, je décrète que le fichier n'est pas accessible...

    je n'avais pas trouvé mieux...

  5. #5
    Membre éprouvé
    Inscrit en
    Décembre 2003
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2003
    Messages : 108
    Par défaut
    j'ai eu ce soucis aussi et j'ai utilisé une solution pas franchement top c'est de comparer la taille des fichiers, une fois identique c'était que la copie était terminée

  6. #6
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    oui, mais comme je le disais mon premier post:

    "Je précise que je n'ai aucune info sur la source des fichiers qui peuvent arriver par une simple copie autant que par transfert ftp. Je ne peux donc pas me baser sur la taille de départ de ces fichiers."

    :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 20
    Dernier message: 29/10/2014, 11h52
  2. Attendre la fin d'une copie de fichier (File.Copy())
    Par DiplomatiCoder dans le forum C#
    Réponses: 6
    Dernier message: 24/10/2008, 22h37
  3. Réponses: 9
    Dernier message: 02/09/2008, 13h52
  4. Faire une sauvegarde par copie de fichier, est-ce fiable ?
    Par guidav dans le forum Administration
    Réponses: 5
    Dernier message: 04/09/2006, 10h17
  5. Réponses: 7
    Dernier message: 16/08/2006, 10h55

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