FileSystemWatcher 没有触发事件
FileSystemWatcher is not firing events
作为 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
结束Class
这里首先要考虑的是 watcher 是 运行 方法内部的一个局部变量。这意味着您的观察者将在退出 运行 方法后立即被垃圾回收。您需要在全局 class 级别声明它并保持该 class 的一个实例,直到您完成使用监控代码。
Public Class FileWatcher
Dim watcher As New FileSystemWatcher()
Public Sub run(path As String)
....
接下来请记住 OnChanged 和 OnRenamed 是事件处理程序,因此应将它们声明为 Sub 而不是 Function。当然,他们什么都不 return
如果您需要这些处理程序的值,您需要实施某种全局变量来保存您的数据以供进一步处理。一个例子可以是一个列表(应该扩展字符串列表以区分添加和删除的文件,或者更好地使用你自己的 class 和这个 classes 实例的列表)
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
作为 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
结束Class
这里首先要考虑的是 watcher 是 运行 方法内部的一个局部变量。这意味着您的观察者将在退出 运行 方法后立即被垃圾回收。您需要在全局 class 级别声明它并保持该 class 的一个实例,直到您完成使用监控代码。
Public Class FileWatcher
Dim watcher As New FileSystemWatcher()
Public Sub run(path As String)
....
接下来请记住 OnChanged 和 OnRenamed 是事件处理程序,因此应将它们声明为 Sub 而不是 Function。当然,他们什么都不 return
如果您需要这些处理程序的值,您需要实施某种全局变量来保存您的数据以供进一步处理。一个例子可以是一个列表(应该扩展字符串列表以区分添加和删除的文件,或者更好地使用你自己的 class 和这个 classes 实例的列表)
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