■■■

2016年4月2日土曜日

ファイルやフォルダの変更を監視する方法

ファイルやフォルダの変更を監視する方法
VB.NET
Dim watcher As New System.IO.FileSystemWatcher
watcher.Path = "C:\docs"
watcher.Filter = "*.txt"
watcher.NotifyFilter = System.IO.NotifyFilters.FileName Or _
System.IO.NotifyFilters.DirectoryName Or _
System.IO.NotifyFilters.LastWrite
watcher.IncludeSubdirectories = False
Dim changedResult As System.IO.WaitForChangedResult = _
    watcher.WaitForChanged(System.IO.WatcherChangeTypes.All)
If changedResult.TimedOut Then
Console.WriteLine("タイムアウト")
Return
End If

Select Case changedResult.ChangeType
Case System.IO.WatcherChangeTypes.Changed
Console.WriteLine(("ファイル 「" + _
changedResult.Name + "」変更"))
Case System.IO.WatcherChangeTypes.Created
Console.WriteLine(("ファイル 「" + _
changedResult.Name + "」作成"))
Case System.IO.WatcherChangeTypes.Deleted
Console.WriteLine(("ファイル 「" + _
changedResult.Name + "」削除"))
Case System.IO.WatcherChangeTypes.Renamed
Console.WriteLine(("ファイル 「" + _
changedResult.OldName + "」「" + _
changedResult.Name + "」変更。"))
End Select
C#
System.IO.FileSystemWatcher watcher =
new System.IO.FileSystemWatcher();
watcher.Path = @"C:\My Documents";
watcher.Filter = "*.txt";
watcher.NotifyFilter =
System.IO.NotifyFilters.FileName
| System.IO.NotifyFilters.DirectoryName
| System.IO.NotifyFilters.LastWrite;
watcher.IncludeSubdirectories = false;
System.IO.WaitForChangedResult changedResult =
    watcher.WaitForChanged(System.IO.WatcherChangeTypes.All);
if (changedResult.TimedOut)
{
Console.WriteLine("タイムアウト!!です");
return;
}
switch (changedResult.ChangeType)
{
case System.IO.WatcherChangeTypes.Changed:
Console.WriteLine(
"ファイル 「" + changedResult.Name + "」変更");
break;
case System.IO.WatcherChangeTypes.Created:
Console.WriteLine(
"ファイル 「" + changedResult.Name + "」作成");
break;
case System.IO.WatcherChangeTypes.Deleted:
Console.WriteLine(
"ファイル 「" + changedResult.Name + "」削除");
break;
case System.IO.WatcherChangeTypes.Renamed:
Console.WriteLine(
"ファイル 「" + changedResult.OldName +
"」名前「" + changedResult.Name +
"」変更");
break;
}
フォルダやファイルの変更を監視する方法(非同期)
VB.NET
Private watcher As System.IO.FileSystemWatcher = Nothing
Private Sub btn1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btn1.Click
If Not (watcher Is Nothing) Then
Return
End If


watcher = New System.IO.FileSystemWatcher
watcher.Path = "C:\My Documents"
watcher.NotifyFilter = System.IO.NotifyFilters.LastAccess Or _
System.IO.NotifyFilters.LastWrite Or _
System.IO.NotifyFilters.FileName Or _
System.IO.NotifyFilters.DirectoryName
watcher.Filter = ""
watcher.SynchronizingObject = Me

AddHandler watcher.Changed, AddressOf watcher_Changed
AddHandler watcher.Created, AddressOf watcher_Changed
AddHandler watcher.Deleted, AddressOf watcher_Changed
AddHandler watcher.Renamed, AddressOf watcher_Renamed

watcher.EnableRaisingEvents = True
Console.WriteLine("監視開始")
End Sub
Private Sub btn2_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btn2.Click
watcher.EnableRaisingEvents = False
watcher.Dispose()
watcher = Nothing
Console.WriteLine("監視終了")
End Sub
'イベントハンドラ
Private Sub watcher_Changed(ByVal source As System.Object, _
ByVal e As System.IO.FileSystemEventArgs)
Select Case e.ChangeType
Case System.IO.WatcherChangeTypes.Changed
Console.WriteLine(("ファイル 「" + e.FullPath + _
"」変更"))
Case System.IO.WatcherChangeTypes.Created
Console.WriteLine(("ファイル 「" + e.FullPath + _
"」作成"))
Case System.IO.WatcherChangeTypes.Deleted
Console.WriteLine(("ファイル 「" + e.FullPath + _
"」削除"))
End Select
End SubPrivate Sub watcher_Renamed(ByVal source As System.Object, _
    ByVal e As System.IO.RenamedEventArgs)
Console.WriteLine(("ファイル 「" + e.FullPath + _
"」名前変更"))
End Sub
C#
private System.IO.FileSystemWatcher watcher = null;
private void btn1_Click(object sender, System.EventArgs e)
{
if (watcher != null) return;

watcher = new System.IO.FileSystemWatcher();
watcher.Path = @"C:\docs";
watcher.NotifyFilter =
(System.IO.NotifyFilters.LastAccess
| System.IO.NotifyFilters.LastWrite
| System.IO.NotifyFilters.FileName
| System.IO.NotifyFilters.DirectoryName);
watcher.Filter = "";
watcher.SynchronizingObject = this;

watcher.Changed += new System.IO.FileSystemEventHandler(watcher_Changed);
watcher.Created += new System.IO.FileSystemEventHandler(watcher_Changed);
watcher.Deleted += new System.IO.FileSystemEventHandler(watcher_Changed);
watcher.Renamed += new System.IO.RenamedEventHandler(watcher_Renamed);

watcher.EnableRaisingEvents = true;
Console.WriteLine("監視開始");
}
private void btn2_Click(object sender, System.EventArgs e)
{
watcher.EnableRaisingEvents = false;
watcher.Dispose();
watcher = null;
Console.WriteLine("監視終了");
}
private void watcher_Changed(System.Object source,
System.IO.FileSystemEventArgs e)
{
switch (e.ChangeType)
{
case System.IO.WatcherChangeTypes.Changed:
Console.WriteLine(
"ファイル 「" + e.FullPath + "」変更");
break;
case System.IO.WatcherChangeTypes.Created:
Console.WriteLine(
"ファイル 「" + e.FullPath + "」作成");
break;
case System.IO.WatcherChangeTypes.Deleted:
Console.WriteLine(
"ファイル 「" + e.FullPath + "」削除");
break;
}
}
private void watcher_Renamed(System.Object source, 
System.IO.RenamedEventArgs e)
{
Console.WriteLine(
"ファイル 「" + e.FullPath + "」名前変更");
}


■■■