工作中遇到了一个需求:文件服务器的一个DWG文件夹如果要更改,就要及时通知相关的人。所以我利用FileSystemWatcher写了个小程序,监控指定目录,如果文件被创建,删除,修改,重命名,就会发送邮件到相关的人。

将其加入文件服务器的开机脚本,经测试通过。

开发环境Windows 7,Microsoft Visual Studio 2010,运行环境Windows server 2008.

新建一个窗体,一个label,一个timer。

以下为源码,

Imports System
Imports System.IO
Imports Microsoft.VisualBasic
Imports System.Security.Permissions
Imports System.Net.Mail
Imports System.Text


Public Class Form1
    Public sb As New StringBuilder
    Public mailStr As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim MyWatcher As New System.IO.FileSystemWatcher()
        Label1.Text = "I am watching......"

        '定义需要监控的目录
        MyWatcher.Path = "c:\share"
        '定义需要监控的文件类型
        MyWatcher.Filter = "*.dwg"
        MyWatcher.IncludeSubdirectories = False
        MyWatcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
        AddHandler MyWatcher.Changed, AddressOf OnChanged
        AddHandler MyWatcher.Created, AddressOf OnCreated
        AddHandler MyWatcher.Deleted, AddressOf OnDeleted
        AddHandler MyWatcher.Renamed, AddressOf OnRenamed
        MyWatcher.EnableRaisingEvents = True

    End Sub
    Private Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
        sb.Append("Hi")
        sb.Append(vbCrLf)
        sb.Append("You are informed that the file " & e.Name & " " & " is changed.")
        sb.Append(vbCrLf)
        sb.Append("----------------------------------------------------------------------")
        sb.Append(vbCrLf)
        sb.Append("This email was sent from the FileWatching program, please do not reply.")
        mailStr = sb.ToString
        sb.Remove(0, Len(mailStr))
        Call sendMail(mailStr)
    End Sub
    Private Sub OnCreated(ByVal source As Object, ByVal e As FileSystemEventArgs)
        sb.Append("Hi")
        sb.Append(vbCrLf)
        sb.Append("You are informed that the file " & e.Name & " " & " is created.")
        sb.Append(vbCrLf)
        sb.Append("----------------------------------------------------------------------")
        sb.Append(vbCrLf)
        sb.Append("This email was sent from the FileWatching program, please do not reply.")
        mailStr = sb.ToString
        sb.Remove(0, Len(mailStr))
        Call sendMail(mailStr)
    End Sub
    Private Sub OnDeleted(ByVal source As Object, ByVal e As FileSystemEventArgs)
        sb.Append("Hi")
        sb.Append(vbCrLf)
        sb.Append("You are informed that the file " & e.Name & " " & " is deleted.")
        sb.Append(vbCrLf)
        sb.Append("----------------------------------------------------------------------")
        sb.Append(vbCrLf)
        sb.Append("This email was sent from the FileWatching program, please do not reply.")
        mailStr = sb.ToString
        sb.Remove(0, Len(mailStr))
        Call sendMail(mailStr)
    End Sub

    Private Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
        sb.Append("Hi")
        sb.Append(vbCrLf)
        sb.Append("You are informed that the file " & e.OldName & " renamed to " & e.Name)
        sb.Append(vbCrLf)
        sb.Append("----------------------------------------------------------------------")
        sb.Append(vbCrLf)
        sb.Append("This email was sent from the FileWatching program, please do not reply.")
        mailStr = sb.ToString
        sb.Remove(0, Len(mailStr))
        Call sendMail(mailStr)
    End Sub


    Private Sub sendMail(ByVal fileUpdates As String)
        '邮件的发送者和接受者
        Dim mailMsg As New MailMessage(FileWatcher@xxxx.com, "mailgroup@xxxx.com")
        With mailMsg
            '邮件主题
            .Subject = "DWG File is Updated"
            '邮件内容
            .Body = fileUpdates
        End With
        '设置SMTP服务器,DNS名或者IP
        Dim client As New SmtpClient("mailserverxxx")
        client.Send(mailMsg)

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Me.Hide()
    End Sub
End Class