Bonjour à tous,
Je tombe devant un problème et n'arrive pas à le résoudre. J'en connais la cause, mais n'ai pas de solution. Si vous en avez une ça serait super cool.
Mon probleme :
- J'utilise un FileSystemWatcher pour détecter la création/effacement d'un fichier dans un répertoire distinct.
- Lorsque le fichier est détecté, l'Event réalise un parsing de ce fichier (.xml).
- Tant que le fichier est présent, une part du programme (un timer) est arrêté.
- Lorsque le fichier est effacé, le programme reprend son court... (Timer.enabled = true...).
Cette détection fonctionne la 1ere fois qu'il détecte le fichier (cycle de création/effacement).
En revanche, lorsque le fichier est créée une 2eme fois, cela ne fonctionne plus et VB me renvoie une erreur comme quoi le fichier est déjà utilisé... humm!! ce qui n'est pas le cas.
Ci-dessous le code du filesystemwatcher :
Afin de vérifier mon code, j'ai "remplacé" l'action du FileSystemWatcher par 2 boutons avec le même code que Sub myFsWatcher_Created et Sub myFsWatcher_Deleted. Cela fonctionne parfaitement...
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
24
25
26
27
28 Imports System.IO Public Sub initFsWatcher() ' Répertoire à surveiller myFsWatcher.Path = mySetupData.xml_datas ' Surveille les sous répertoires myFsWatcher.IncludeSubdirectories = False ' Surveille tous les fichiers sans exception ou bien un fichier en particulier myFsWatcher.Filter = mySetupData.MatchDataFile ' Surveille les types d'évènements suivants = Changement sur le fichier (création/changement du fichier/renomage/effacement) myFsWatcher.NotifyFilter = NotifyFilters.FileName ' Permet de faire s'exécuter tous les EventHandlers dans le thread principal myFsWatcher.SynchronizingObject = Me ' Active la levée d'évènements par le FileSystemWatcher myFsWatcher.EnableRaisingEvents = True AddHandler myFsWatcher.Created, AddressOf myFsWatcher_Created ' Création d'un fichier AddHandler myFsWatcher.Deleted, AddressOf myFsWatcher_Deleted ' Effacement d'un fichier End Sub Public Sub myFsWatcher_Created(sender As System.Object, e As System.IO.FileSystemEventArgs) 'Handles myFsWatcher.Created ' Fichier trouvé dans le répertoire, lancement du parser... et arrêt d'un timer... End Sub Public Sub myFsWatcher_Deleted(sender As System.Object, e As System.IO.FileSystemEventArgs) ' ici la gestion quand le fichier est effacé.... relancement d'un timer... End Sub
Donc mon probleme semble venir d'une ré-initialisation du Watcher, peut-être... ou bien ai-je oublié qlq chose dans le Sub initFsWatcher() ?
Merci de votre aide.
Patrick
Partager