FileSystemWatcher未触发事件

时间:2016-07-28 09:03:25

标签: vb.net filesystemwatcher

作为vb中的新手,我在FileSystemWatcher中遇到了一些麻烦。由于一些不祥的原因,它不会发生任何事件。我想检查目录中正在复制,删除或编辑的文件。

我感谢任何帮助!!

这是我的代码:

Public Class FileWatcher

Public Sub run(path As String)
    Dim watcher As New FileSystemWatcher()

    watcher.Path = path
    watcher.Filter = "*.xml"
    watcher.NotifyFilter = NotifyFilters.FileName Or NotifyFilters.LastWrite Or NotifyFilters.CreationTime

    AddHandler watcher.Changed, AddressOf OnChanged
    AddHandler watcher.Created, AddressOf OnChanged
    AddHandler watcher.Deleted, AddressOf OnChanged
    AddHandler watcher.Renamed, AddressOf OnRenamed

    watcher.EnableRaisingEvents = True

End Sub


Public Function OnChanged(source As Object, e As FileSystemEventArgs) As String
    ' Returns file name for later use
    Console.WriteLine("Monitoring: " + e.FullPath)
    Return e.FullPath
End Function

Public Function OnRenamed(source As Object, e As RenamedEventArgs) As String
    Console.WriteLine("Monitoring: " + e.FullPath)
    Return e.FullPath
End Function

结束班

1 个答案:

答案 0 :(得分:0)

这里要考虑的第一件事是观察者是run方法中的局部变量。这意味着在退出run方法后,您的观察者将立即被垃圾收集。您需要在globlal类级别声明它并保持该类的实例,直到您完成使用监视代码。

Public Class FileWatcher
     Dim watcher As New FileSystemWatcher()

     Public Sub run(path As String)

        ....

接下来请记住,OnChanged和OnRenamed是事件处理程序,因此它们应该声明为Sub而不是Function。当然,他们不会返回任何东西

如果您需要这些处理程序的值,您需要实现某种全局变量,以保持数据的进一步处理。一个示例可以是一个列表(应扩展字符串列表以区分添加和删除的文件,或者更好地使用您自己的类和此类实例的列表)

Dim changedFiles = new List(Of String)()
Dim renamedFiles = new List(Of String)()
Public Sub OnChanged(source As Object, e As FileSystemEventArgs) 
    Console.WriteLine("Monitoring: " + e.FullPath)
    changedFiles.Add(e.FullPath)
End Sub

Public Sub OnRenamed(source As Object, e As RenamedEventArgs)
    Console.WriteLine("Monitoring: " + e.FullPath)
    renamedFiles.Add(e.FullPath)
End Sub