2010-07-31 4 views
2

j'ajouté FileSystemWatcher dans Form1_Load comme ceci:FileSystemWatcher ne fonctionne pas

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     .................... 
     Dim watcher As New FileSystemWatcher() 
     'For watching current directory 
     watcher.Path = "/" 
     'For watching status.txt for any changes 
     watcher.Filter = "status.txt" 
     watcher.NotifyFilter = NotifyFilters.LastWrite 
     watcher.EnableRaisingEvents = True 
     AddHandler watcher.Changed, AddressOf OnChanged 
End Sub 

J'ai une fonction OnChanged qui est un simple MessageBox. Pourtant, quand je change le fichier status.txt, aucune boîte de message n'est montrée.

+0

Personnellement, j'éviterais FileSystemWatcher comme la peste. Revenez à votre question d'origine (http://stackoverflow.com/questions/3371214/in-vb-net-how-to-know-if-the-file-hasnt-been-changed-for-x-seconds/3371233 # 3371233) et choisissez une autre méthode. – PaulG

+0

Je seconde ceci. FileSystemWatcher restera là à attendre qu'une autre condition échoue. Ne l'utilisez jamais pour quelque chose d'important. –

Répondre

5
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
Dim watcher As New IO.FileSystemWatcher() 

'For watching current directory 
watcher.Path = **System.IO.Directory.GetCurrentDirectory()** 'Note how to obtain current directory 
watcher.NotifyFilter = NotifyFilters.LastWrite 

'When I pasted your code and created my own status.txt file using 
'right click->new->Text File on Windows 7 it appended a '.txt' automatically so the 
'filter wasn't finding it as the file name was status.txt.txt renaming the file 
'solved the problem 
watcher.Filter = "status.txt" 

AddHandler watcher.Changed, AddressOf OnChanged 

watcher.EnableRaisingEvents = True 
End Sub 

Private Shared Sub OnChanged(ByVal source As Object, ByVal e As IO.FileSystemEventArgs) 
MessageBox.Show("Got it") 
End Sub 

De http://bartdesmet.net/blogs/bart/archive/2004/10/21/447.aspx

Vous remarquerez peut-être dans certaines situations qu'un événement de création unique génère plusieurs événements créés qui sont gérés par votre composant. Par exemple, si vous utilisez un composant FileSystemWatcher pour surveiller la création de nouveaux fichiers dans un répertoire, puis le tester en utilisant le Bloc-notes pour créer un fichier, deux événements Created peuvent être générés même si un seul fichier a été créé. Cela est dû au fait que le Bloc-notes exécute plusieurs actions du système de fichiers pendant le processus d'écriture. Bloc-notes écrit sur le disque dans les lots qui créent le contenu du fichier, puis les attributs de fichier. D'autres applications peuvent fonctionner de la même manière. Étant donné que FileSystemWatcher surveille les activités du système d'exploitation, tous les événements déclenchés par ces applications seront récupérés.

+0

Merci, cela fonctionne. Juste un problème de plus. L'alerte est affichée deux fois pour un changement. – Shubham

+0

Cher Monsieur, Vous pourriez peut-être jeter un coup d'œil à ma question concernant votre réponse. http://stackoverflow.com/questions/7184472/fileinfo-exceptions – Derek

0

Vous devriez également écouter l'événement Deleted. Selon l'éditeur que vous utilisez, ils suppriment/remplacent parfois le fichier au lieu de simplement le modifier.

+0

Ne fonctionne pas encore! – Shubham