Plusieurs Path à surveiller pour un FileSystemWatcher - Surveiller tout l'ordina

Résolu
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012 - 14 juil. 2012 à 12:06
 Utilisateur anonyme - 14 juil. 2012 à 15:54
Bonjour, je cherche comme indiquer dans le titre à surveiller les opérations sur les fichiers effectuées sur tout l'ordinateur.
Pour cela je me sers de FileSystemWatcher, mais j'aimerais pouvoir surveiller plusieurs Path à la fois, et non pas que "C:" par exemple (je voudrais pouvoir surveiller tous mes disques en fait).

Merci.

11 réponses

Utilisateur anonyme
14 juil. 2012 à 15:43
Que vient faire CreateObject là dedans ?
Relis mon premier post. Sers toi de IO.DriveInfo.GetDrives
3
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
14 juil. 2012 à 15:53
Merci, ça venait bien de là :(
La solution :

 Dim allDrives() As DriveInfo = DriveInfo.GetDrives()
        Dim d As DriveInfo
        For Each d In allDrives
            If d.IsReady = True Then
                ' Créé un nouveau FileSystemWatcher
                Dim watcher As New FileSystemWatcher()
                ' Path à surveiller
                MsgBox(d.RootDirectory.FullName)
                watcher.Path = d.RootDirectory.FullName
                ' Les opérations que l'on surveille
                watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
                ' Les types de fichier que l'on surveille
                ' watcher.Filter = "*.txt"
                ' On surveille même les sous dossiers
                watcher.IncludeSubdirectories = True
                ' Ajout des événements
                AddHandler watcher.Changed, AddressOf OnChanged
                AddHandler watcher.Created, AddressOf OnChanged
                AddHandler watcher.Deleted, AddressOf OnChanged
                AddHandler watcher.Renamed, AddressOf OnRenamed
                ' On commence le watcher
                watcher.EnableRaisingEvents = True
            End If
        Next
3
Utilisateur anonyme
14 juil. 2012 à 13:57
Bonjour,

Sers toi de IO.DriveInfo.GetDrives pour récupérer les lecteurs.
Enumère les dans une boucle et teste s'ils sont prêts (IsReady).
Crée une instance d'un FileSystemWatcher.
Indique lui le Path à surveiller avec RootDirectory.FullName de ton DriveInfo
Indique lui de surveiuller les sous-dossiers avec IncludeSubdirectories
Ajoute un gestionnaire d'événement (AddHandler)
Active le déclenchement des événements (EnableRaisingEvents)

Bonne chance.
0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
14 juil. 2012 à 15:11
Donc si je comprends bien dans ta boucle, je crée un SystemWatcher pour chaque disque ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
14 juil. 2012 à 15:16
Tu n'as pas le choix puisque la propriété Path n'accepte qu'une seule chaîne.
0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
14 juil. 2012 à 15:25
ça ne marche pas... Quand je fais cela ça n'observe que le C:\
0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
14 juil. 2012 à 15:28
Je procède comme ceci :

 Dim FSO = CreateObject("Scripting.FileSystemObject")
        For Each Drv In FSO.Drives
            If Drv.IsReady Then
                ' Créé un nouveau FileSystemWatcher
                Dim watcher As New FileSystemWatcher()
                ' Path à surveiller
                watcher.Path = Drv.Path
                ' Les opérations que l'on surveille
                watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
                ' Les types de fichier que l'on surveille
                ' watcher.Filter = "*.txt"
                ' On surveille même les sous dossiers
                watcher.IncludeSubdirectories = True
                ' Ajout des événements
                AddHandler watcher.Changed, AddressOf OnChanged
                AddHandler watcher.Created, AddressOf OnChanged
                AddHandler watcher.Deleted, AddressOf OnChanged
                AddHandler watcher.Renamed, AddressOf OnRenamed
                ' On commence le watcher
                watcher.EnableRaisingEvents = True
            End If
        Next

0
gege1505 Messages postés 54 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 7 août 2012
14 juil. 2012 à 15:46
ça change strictement rien.
J'ai toujours fait avec FileSystemObject et ça a toujours marché, pour preuve, je place MsgBox(Drv.Path) dans mon code dans la boucle, et ça m'affiche bien tous mes disques les uns après les autres.

Mais bon je vais quand même essayer avec IO, peut être que dans ce cas précis, ça a son importance.
0
Utilisateur anonyme
14 juil. 2012 à 15:48
Je te donne un indice :
For Each drv As IO.DriveInfo In IO.DriveInfo.GetDrives
0
Utilisateur anonyme
14 juil. 2012 à 15:49
Tu es sûr de ton NotifyFilter ?
0
Utilisateur anonyme
14 juil. 2012 à 15:54
Oui CreateObject est à proscrire
0
Rejoignez-nous