【问题标题】:FileSystemWatcher is not firing eventsFileSystemWatcher 没有触发事件
【发布时间】:2016-07-28 09:03:25
【问题描述】:

作为 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

结束类

【问题讨论】:

标签: vb.net filesystemwatcher


【解决方案1】:

这里首先要考虑的是观察者是run方法中的一个局部变量。这意味着您的观察者将在退出 run 方法后立即被垃圾收集。您需要在全局类级别声明它并保持该类的实例处于活动状态,直到您使用完监控代码。

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

【讨论】:

  • 非常感谢!
  • 很高兴能提供帮助,但只是一个问题。你为什么停止接受对你有帮助的答案?
  • 对不起,我忘了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多