工作中遇到了一個需求:文件服務器的一個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([email protected], "[email protected]")
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