首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FileSystemWatcher不触发用VB.NET创建的Windows中的事件

FileSystemWatcher不触发用VB.NET创建的Windows中的事件
EN

Stack Overflow用户
提问于 2022-07-14 13:35:01
回答 1查看 57关注 0票数 1

尝试使用VB.NET创建Windows服务,该服务将监视使用FileSystemWatcher的文件夹中的更改。服务安装和启动良好,但当我添加或删除文件时不会触发任何事件。

"started“注释出现在事件日志中,但我没有得到其他事件日志条目。

我已经研究过其他使用FSW的例子(在VB和C#中),并且找不出哪里出了问题。我在一个不同的类中获得了FSW的细节,但是将其全部拉到一个类中,并尽可能地减少代码以排除故障。当我在被监视的文件夹中创建或删除一个文件时,仍然没有。

会不会是许可问题?我遗漏了什么?提前谢谢你。

代码语言:javascript
运行
复制
Imports System.IO

Public Class TestFileWatcher

    Dim WithEvents watcher As System.IO.FileSystemWatcher
    Dim myLog As System.Diagnostics.EventLog
    Dim folderName As String
    Dim fileTypes As String

    Protected Overrides Sub OnStart(ByVal args() As String)
        ' Add code here to start your service. This method should set things
        ' in motion so your service can do its work.
        myLog = New System.Diagnostics.EventLog()
        If Not EventLog.SourceExists("My Test Log") Then
            EventLog.CreateEventSource("My Test Log", "Application")
        End If
        myLog.Source = "My Test Log"
        folderName = "C:\temp\"
        fileTypes = "*.*"
        Try
            watcher = New System.IO.FileSystemWatcher()
            DefineWatcher()
            watcher.EnableRaisingEvents = True
            myLog.WriteEntry("started watcher")
        Catch
            ErrorHandler(e)
            System.Environment.Exit(-1)     '0=successful exit
        End Try
    End Sub

    Protected Overrides Sub OnStop()
        ' Add code here to perform any tear-down necessary to stop your service.
        StopWatcher()
    End Sub

    Public Sub StopWatcher()
        watcher.Dispose()
    End Sub

    Public Sub RecordOnEventLog(ByVal str As String)
        myLog.WriteEntry(str)
    End Sub

    Protected Sub ErrorHandler(ByVal e As ApplicationException)
        Dim err As String
        err = "ERROR" + vbCrLf
        err += "Message: " + e.Message + vbCrLf
        err += "Source: " + e.Source + vbCrLf
        err += "Method: " + e.TargetSite.Name + vbCrLf
        err += "Stack Trace: " + e.StackTrace + vbCrLf
        err += "Error String: " + e.ToString + vbCrLf
        err += "Application shut down at " & My.Computer.Clock.GmtTime.ToString
        myLog.WriteEntry(err)
    End Sub

    Public Sub DefineWatcher()
        watcher.BeginInit()
        watcher.Path = folderName
        watcher.Filter = fileTypes
        watcher.IncludeSubdirectories = False
        watcher.NotifyFilter = System.IO.NotifyFilters.FileName
        watcher.NotifyFilter = watcher.NotifyFilter Or System.IO.NotifyFilters.Attributes
        watcher.NotifyFilter = watcher.NotifyFilter Or System.IO.NotifyFilters.CreationTime
        watcher.NotifyFilter = watcher.NotifyFilter Or System.IO.NotifyFilters.Security
        AddHandler watcher.Created, AddressOf OnCreated
        AddHandler watcher.Deleted, AddressOf OnDeleted
        watcher.EndInit()
    End Sub

    Public Sub OnCreated(src As Object, e As FileSystemEventArgs)
        RecordOnEventLog("New file added to temp folder, path: " + e.FullPath)
    End Sub

    Public Sub OnDeleted(src As Object, e As FileSystemEventArgs)
        RecordOnEventLog("Item deleted")
    End Sub

End Class
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-14 15:44:08

谢谢你的帮助。不知道是什么阻止了它早些时候起作用,但现在起作用了。这是任何感兴趣的人的工作代码。

代码语言:javascript
运行
复制
Option Strict On

Imports System.IO

Public Class TestFileWatcher

    Dim watcher As System.IO.FileSystemWatcher = New System.IO.FileSystemWatcher()
    Dim myLog As System.Diagnostics.EventLog = New System.Diagnostics.EventLog()
    Dim folderName As String = "C:\temp"
    Dim fileTypes As String = "*.*"
    Dim myLogName As String = "My Test Log"

    Protected Overrides Sub OnStart(ByVal args() As String)
        StartLog()
        Try
            DefineWatcher()
            watcher.EnableRaisingEvents = True
            myLog.WriteEntry("started watcher hopefully")
        Catch e As Exception
            ErrorHandler(e)
            System.Environment.Exit(-1)     '0=successful exit
        End Try
    End Sub

    Protected Overrides Sub OnStop()
        StopWatcher()
    End Sub

    Private Sub StartLog()
        If Not EventLog.SourceExists(myLogName) Then
            EventLog.CreateEventSource(myLogName, "Application")
        End If
        myLog.Source = myLogName
    End Sub

    Private Sub StopWatcher()
        watcher.Dispose()
    End Sub

    Private Sub RecordOnEventLog(ByVal str As String)
        myLog.WriteEntry(str)
    End Sub

    Private Sub ErrorHandler(ByVal e As Exception)
        Dim err As String
        err = "ERROR" + vbCrLf
        err += "Message: " + e.Message + vbCrLf
        err += "Source: " + e.Source + vbCrLf
        err += "Method: " + e.TargetSite.Name + vbCrLf
        err += "Stack Trace: " + e.StackTrace + vbCrLf
        err += "Error String: " + e.ToString + vbCrLf
        err += "Application shut down at " & My.Computer.Clock.GmtTime.ToString
        myLog.WriteEntry(err)
    End Sub

    Private Sub DefineWatcher()
        watcher.BeginInit()
        watcher.Path = folderName
        watcher.Filter = fileTypes
        watcher.IncludeSubdirectories = False
        watcher.NotifyFilter = System.IO.NotifyFilters.FileName
        watcher.NotifyFilter = watcher.NotifyFilter Or System.IO.NotifyFilters.Attributes
        watcher.NotifyFilter = watcher.NotifyFilter Or System.IO.NotifyFilters.CreationTime
        watcher.NotifyFilter = watcher.NotifyFilter Or System.IO.NotifyFilters.Security
        AddHandler watcher.Created, AddressOf OnCreated
        AddHandler watcher.Deleted, AddressOf OnDeleted
        watcher.EndInit()
    End Sub

    Private Sub OnCreated(src As Object, e As FileSystemEventArgs)
        RecordOnEventLog("New file added to temp folder, path: " + e.FullPath)
    End Sub

    Private Sub OnDeleted(src As Object, e As FileSystemEventArgs)
        RecordOnEventLog("Item was deleted: " + e.FullPath)
    End Sub

End Class
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72981436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档