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

VB.NET Discussion :

[VB.Net/FileSystemWatcher] Comment gérer la fin d'écriture ?


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut [VB.Net/FileSystemWatcher] Comment gérer la fin d'écriture ?
    Bonjour,

    Je développe actuelement une application qui, apres création d'un fichier tiff ( dans un repertoire temp) par un logiciel d'imagerie, l'importe dans un autre logiciel

    Or ces fichiers vont entre 1 et 3mo... Il me faut donc attendre que le fichier soit finalisé

    J'ai utilisé la faq : pour FileSystemWatcher

    http://faqvbnet.developpez.com/?page=file#file_watcher

    pour le moment j'ai remplacé la console par du msgbox pour verifier le fonctionnement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox("File" & e.FullPath & "  " & e.ChangeType)
    il m'indique donc le fichier et le type de change : 1 Created, 4 Changed et 2 : Deleted

    donc pour le moment quand le fichier est créé il m'affiche 1 et plusieur 4

    Il faudrait donc que je puisse detecter la fin des 4 pour pouvoir executer une autre fonction

    Une ID ?

    Merci

  2. #2
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Je pense que c'est barbare mais personnellement j'essayais sans cesse de l'ouvrir en lecture et j'attendais que ça marche... En théorie ça génère une exception lorsque tu modifie le fichier...

    Maintenant si quelqu'un a plus joli je suis preneur.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Regarder la taille du fichier à interval régulier et dès que la taille du fichier ne bouge plus, considérer que c'est fini ?

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Pour ma part, j'ai la même problématique avec des fichiers rar de taille variable de 3mo jusqu'à 15mo que j'uploade depuis un serveur A vers un serveur B. Ce n'est pas très propre mais j'utilise un fichier texte vide de flag : synchro.flag que j'uploade sur B à la fin de l'upload des fichiers .rar.
    Sur le serveur B, mon FileSystemWatcher ne scrute que les Created et une fois que j'ai tous mes fichiers rar et mon fichier flag, je manipe sur mes fichiers rar (décompression --> si d'ailleurs qqn connait un bon outil pour ça je suis preneur) puis j'efface mon fichier de flag.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par Gaël Donat
    Regarder la taille du fichier à interval régulier et dès que la taille du fichier ne bouge plus, considérer que c'est fini ?

    Bonjour

    Tu as quelque chose pour voir la taille ?

    Merci

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par 6su7
    Bonjour

    Tu as quelque chose pour voir la taille ?

    Merci
    En faisant un FileInfo sur le fichier, il doit etre possible de récupérer la taille

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    System.IO.NotifyFilters.LastWrite

    System.IO.NotifyFilters.Size

    on peut pas utiliser ca ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    quand je lance le Watcher il me créé une 2nd instance de mon soft ....

    c'est nouveau ... j'en ai mar ...

    il fonctionnait ... mais apres des modif sur d'autre truc ca veut plus ... même en utilisant le code original de la faq

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2006
    Messages : 17
    Points : 18
    Points
    18
    Par défaut FileSystemWatcher
    Bonjour,

    J'ai été confronté il y a peu de temps aux même problèmes que vous.
    Une contrainte supplémentaire était de ne pas exécuter l'évenement du fileSystemWatcher x fois lorsque x fichiers étaient déposés dans le dossier écouté.

    Nous partons du principe que nous n'effectuons pas les traitements des fichiers réceptionnés directement dans le dossier écouté mais dans un autre ! De cette façon, tant qu'un fichier est occupé, dès que nous voulons le déplacer, cela génère une exception qui pourra nous être utile.

    j'ai procédé de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
            System.Threading.Thread.Sleep(500)
     
            If My.Computer.FileSystem.GetFiles(FileSystemWatcher1.Path).Count > 0 Then
                While My.Computer.FileSystem.GetFiles(FileSystemWatcher1.Path).Count > 0
                    sfiles = Directory.GetFiles(FileSystemWatcher1.Path)
                    For Each sfile In sfiles
                        status = False
                        While status = False
                            Try
                                System.IO.File.Move(sfile, Settings.Configuration.PathTransfert + "\" + Machine + "\" + Receptacle + "\" + Path.GetFileName(sfile))
                                status = True
                            Catch ex As Exception
                                status = False
                            End Try
                        End While
                    Next
                End While
            End If
    Je sais que c'est une méthode un peu tiré par les cheveux mais elle fonctionne.

    C'est une idée comme une autre, adaptable et surtout optimisable.

    J'espère que cela pourra t'aider.

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

Discussions similaires

  1. [Delphi.NET][SDK] Comment interpréter System.Security.SecurityException?
    Par Laurent Dardenne dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 07/04/2005, 12h43
  2. Réponses: 2
    Dernier message: 06/04/2005, 15h16
  3. [VB.NET] [PPC] Comment faire un formulaire sur pls pages?
    Par papy27 dans le forum Windows Mobile
    Réponses: 10
    Dernier message: 03/06/2004, 17h23

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