Plusieurs Path à surveiller pour un FileSystemWatcher - Surveiller tout l'ordina [Résolu]

Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
- - Dernière réponse :  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.
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
3
Merci
Que vient faire CreateObject là dedans ?
Relis mon premier post. Sers toi de IO.DriveInfo.GetDrives

Merci Utilisateur anonyme 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
3
Merci
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

Merci gege1505 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de gege1505
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
0
Merci
Donc si je comprends bien dans ta boucle, je crée un SystemWatcher pour chaque disque ?
Commenter la réponse de gege1505
0
Merci
Tu n'as pas le choix puisque la propriété Path n'accepte qu'une seule chaîne.
Commenter la réponse de Utilisateur anonyme
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
0
Merci
ça ne marche pas... Quand je fais cela ça n'observe que le C:\
Commenter la réponse de gege1505
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
0
Merci
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

Commenter la réponse de gege1505
Messages postés
54
Date d'inscription
lundi 2 novembre 2009
Dernière intervention
7 août 2012
0
Merci
ç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.
Commenter la réponse de gege1505
0
Merci
Je te donne un indice :
For Each drv As IO.DriveInfo In IO.DriveInfo.GetDrives
Commenter la réponse de Utilisateur anonyme
0
Merci
Tu es sûr de ton NotifyFilter ?
Commenter la réponse de Utilisateur anonyme
0
Merci
Oui CreateObject est à proscrire
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.