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 :

Utilisation FileSystemWatcher et utilisation de l'évènement Created [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Par défaut Utilisation FileSystemWatcher et utilisation de l'évènement Created
    Bonjour,
    Je débute en VB.net, donc je m'inspire pas mal des cours trouvés sur ce site.
    EN particulier de la fonction FileSystemWatcher développé dans le cours le composant FileSystemWatcher de Ronald VASSEURS.

    J'essaie de développer un service Windows qui doit surveiller l’arrivée de fichiers dans un répertoire et de les renommer.
    Pour le développement du Service je pense que c'est OK.
    Par contre pour la surveillance du répertoire et le renommage des fichiers ça ne fonctionne qu'une fois puis j'ai une exception. Ou bien il faut que j'attente longtemps entre la copie d'un autre fichier.
    Pour tester ces copies j'ai mis la fonction dans une form pour ne pas être obliger de relancer mon service à chaque test.
    J'ai essayé de mettre un Try...Catch pour récupérer l'erreur, mais je ne suis pas sur que ce sois la meilleur méthode de débogage.
    Ci-joint la méthode created
    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
     
       ' Evénements : création
        Private Shared Sub MyFsWatcher_Created(ByVal sender As Object, ByVal e As FileSystemEventArgs) Handles MyFsWatcher.Created
            Dim strNomFichier, StrExtension As String
            strNomFichier = Left(e.Name, Len(e.Name) - 4)
            StrExtension = Right(e.Name, 4)
     
            FileIO.WriteToFile(Date.Now & " - " & e.FullPath & " Créé !" + vbNewLine)
     
            Try
                My.Computer.FileSystem.RenameFile(e.FullPath, strNomFichier & "_CBO" & StrExtension)
                FileIO.WriteToFile(Date.Now & " - Fichier " & e.FullPath & " Renommé en " & strNomFichier & "_CBO" & StrExtension + vbNewLine)
            Catch ex As Exception
                FileIO.WriteToFile(Date.Now & " - " & ex.Message + vbNewLine)
            End Try
        End Sub
    FileIO me permet de récupérer les évènement dans un fichier
    C'est la partie RenameFile qui ne fonctionne pas à chaque fois
    J'obtiens l'erreur suivante
    "Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus."
    et si je ne mets pas le catch
    "Cette exception a été levée à l'origine dans cette pile des appels*:
    System.IO.__Error.WinIOError(int, string)
    System.IO.__Error.WinIOError()
    System.IO.File.InternalMove(string, string, bool)
    Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(string, string)
    Microsoft.VisualBasic.MyServices.FileSystemProxy.RenameFile(string, string)
    RenommerEP.SRenommerEP.MyFsWatcher_Created(Object, System.IO.FileSystemEventArgs) dans SRenommerEP.vb
    System.IO.FileSystemWatcher.OnCreated(System.IO.FileSystemEventArgs)
    System.IO.FileSystemWatcher.NotifyFileSystemEventArgs(int, string)
    System.IO.FileSystemWatcher.CompletionStatusChanged(uint, uint, System.Threading.NativeOverlapped*)
    System.Threading._IOCompletionCallback.PerformIOCompletionCallback(uint, uint, System.Threading.NativeOverlapped*)
    "
    Comment vérifier si le processus et libre avant de renommer les fichiers qui suivent ?
    J'espère avoir était assez clair, et vous remercie d'avance pour votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Par défaut
    Bonjour,
    J'ai résolu le problème en testant si j'avais une erreur et dans ce cas je refais le renommage.
    Je ne suis pas sur que ce soit le plus propre mais ça fonctionne.
    Bon Week-end à tous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       Private Shared Sub MyFsWatcher_Created(ByVal sender As Object, ByVal e As FileSystemEventArgs) Handles MyFsWatcher.Created
            Dim blnFichierRenomme As Boolean
            Dim intNbreEssai As Integer
     
            blnFichierRenomme = False
            intNbreEssai = 1
     
            FileIO.WriteToFile(Date.Now.ToString("yyyy/MM/dd hh:mm:ss.fff") & " - " & e.FullPath & " Créé !" + vbNewLine)
            While blnFichierRenomme = False And IntNbreEssai < 10
                blnFichierRenomme = Utile.FRenommerFichier(e.FullPath, e.Name)
                intNbreEssai += 1
            End While
        End Sub
    et la fonction
    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
    20
    21
    22
    23
     
       Function FRenommerFichier(ByVal StrFichier As String, ByVal StrNomFichierExt As String) As Boolean
            Dim strNomFichier, StrExtension As String
            strNomFichier = Left(StrNomFichierExt, Len(StrNomFichierExt) - 4)
            StrExtension = Right(StrNomFichierExt, 4)
     
     
            Try
                My.Computer.FileSystem.RenameFile(StrFichier, strNomFichier & "_CBO" & StrExtension)
                FileIO.WriteToFile(Date.Now.ToString("yyyy/MM/dd hh:mm:ss.fff") & " - Fichier " & StrFichier & " Renommé en " & strNomFichier & "_CBO" & StrExtension + vbNewLine)
                FRenommerFichier = True
            Catch ex As Exception
                Select Case ex.HResult
                    Case -2146232800 'Fichier existant
                        FRenommerFichier = True 'pour sortir de la boucle
                    Case -2147024864 'Processus occupé
                        FRenommerFichier = False 'Pour reessayer
                    Case Else
                        FRenommerFichier = False
                End Select
                FileIO.WriteToFile(Date.Now.ToString("yyyy/MM/dd hh:mm:ss.fff") & " - " & ex.Message + vbNewLine)
            End Try
        End Function

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

Discussions similaires

  1. utilisation de l'événement onDiscard de TComDataPacket
    Par asma_tn dans le forum Composants VCL
    Réponses: 0
    Dernier message: 20/01/2014, 11h45
  2. [JavaScript] [jQuery] Construction et exemples d'utilisation de l'événement spécial clickOutside
    Par danielhagnoul dans le forum Contribuez
    Réponses: 8
    Dernier message: 12/12/2012, 23h49
  3. [Débutant] Classe WMI à utiliser pour les événements de Registry ?
    Par mikedavem dans le forum C#
    Réponses: 0
    Dernier message: 16/06/2011, 14h31
  4. Réponses: 11
    Dernier message: 05/09/2007, 18h23
  5. Réponses: 3
    Dernier message: 27/11/2005, 14h04

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