|
フォルダ内のファイル更新時に通知するサンプル(VB.NET)

|
<このサンプルの概要>
フォルダ内のファイルを監視しファイルが新規作成、更新、削除された時に通知をするサンプルを作ってみました。
System.IO.DirectoryInfoを使用しフォルダ内のファイル一覧を取得しています。そのファイル一覧を使用して
ファイル追加チェックおよびファイル削除チェックをしています。また、System.IO.File.GetLastWriteTimeを使用
してファイルの更新日時を取得し、ファイル更新チェックをしています。
ファイルが更新された事をすぐに知りたいと言う要望を聞く事があり、このサンプルが役に立つかも知れません。
今でも、「共有フォルダにファイルを置くから勝手に見ろ」と言う方が多いようです。何故「ファイル更新したよ」
と声を掛けるとかメールで添付するとか出来ないんでしょうか?そして、見忘れると「なんで見て無いんだ」と。。。
関連情報
・PC状況メール通知(PcEvMail)
PC起動/PC終了/ログイン/ログアウト/ファイル更新時にメール通知/ログ出力するツールです。
・ファイル監視人 ファイル更新時にメールで通知する方法
ファイルやフォルダの更新時にメッセージ表示またはメール送信するツールです。
ファイル監視人のメッセージ表示機能は(フリーソフト)です。
★フォームモジュール(Form1.vb)
Public Class Form1
''' <summary>
''' フォルダ内のファイルPATH一覧
''' </summary>
''' <remarks></remarks>
Private filePath As String() = New String(-1) {}
''' <summary>
''' フォルダ内のファイルの更新日時一覧
''' </summary>
''' <remarks></remarks>
Private fileDate As String() = New String(-1) {}
''' <summary>
''' フォームロード
''' </summary>
''' <param name="sender">sender</param>
''' <param name="e">e</param>
''' <remarks></remarks>
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' (初期設定)フォルダ内のファイルPATH一覧を取得
filePath = GetFileList("c:\temp")
' (初期設定)フォルダ内のファイルの更新日時を取得
ReDim fileDate(UBound(filePath))
For i As Integer = 0 To UBound(filePath)
fileDate(i) = IO.File.GetLastWriteTime(filePath(i)).ToString("yyyyMMddHHmmss")
Next
End Sub
''' <summary>
''' ファイル更新チェック&通知
''' </summary>
''' <param name="sender">sender</param>
''' <param name="e">e</param>
''' <remarks></remarks>
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
' ファイル更新チェックタイマー停止
Timer1.Enabled = False
For i As Integer = 0 To UBound(filePath)
' ファイル更新チェック
If IO.File.Exists(filePath(i)) Then
If fileDate(i) <> IO.File.GetLastWriteTime(filePath(i)).ToString("yyyyMMddHHmmss") Then
' ファイル更新通知
MessageBox.Show("ファイル(" & filePath(i) & ")が更新されました。")
End If
Else
' ファイル削除通知
MessageBox.Show("ファイル(" & filePath(i) & ")が削除されました。")
End If
Next
' フォルダ内のファイルPATH一覧を取得
Dim fPath As String() = GetFileList("c:\temp")
For i As Integer = 0 To UBound(fPath)
' ファイル追加チェック
Dim addFlg As Boolean = True
For j As Integer = 0 To UBound(filePath)
If fPath(i) = filePath(j) Then
addFlg = False
Exit For
End If
Next
' ファイル追加通知
If addFlg Then
MessageBox.Show("ファイル(" & fPath(i) & ")が追加されました。")
End If
Next
' フォルダ内のファイルPATH一覧を保存
filePath = fPath
' フォルダ内のファイルの更新日時を保存
ReDim fileDate(UBound(filePath))
For i As Integer = 0 To UBound(filePath)
fileDate(i) = IO.File.GetLastWriteTime(filePath(i)).ToString("yyyyMMddHHmmss")
Next
' ファイル更新チェックタイマー再開
Timer1.Enabled = True
End Sub
''' <summary>
''' フォルダ内のファイルPATH一覧(配列)取得
''' </summary>
''' <param name="ipath">フォルダPATH</param>
''' <returns>ファイルPATH一覧(配列)</returns>
''' <remarks></remarks>
Public Function GetFileList(ByVal ipath As String) As String()
Dim flist As String() = New String(-1) {}
' フォルダ情報取得
Dim curFol As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(ipath)
' フォルダ内のファイルPATHの一覧作成
Dim fil As System.IO.FileInfo() = curFol.GetFiles()
For i As Integer = 0 To UBound(fil)
ReDim Preserve flist(UBound(flist) + 1)
flist(UBound(flist)) = fil(i).FullName
Next
' ファイルPATH一覧(配列)を返す
Return flist
End Function
End Class