[FileSystemWatcher][Tips] 指定したパスのサブフォルダを監視する


指定したパスのサブフォルダまで監視できるようにするには、IncludeSubdirectoriesプロパティにTrueを設定します。

下記は、指定したパスのサブフォルダを監視する例です。

C:\Workパス以下のサブフォルダにあるファイルの変更を監視します。

VBの例

' フォームロード時の処理
Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    '監視するファイルがある(または作成される)フォルダを設定する
    FileSystemWatcher1.Path = "C:\Work"
    'フィルターの設定
    FileSystemWatcher1.Filter = "*"
    '監視対象をファイル&最終書込日時とする
    FileSystemWatcher1.NotifyFilter = IO.NotifyFilters.FileName Or IO.NotifyFilters.LastWrite
    '★★★指定したパスのサブフォルダを監視する
    FileSystemWatcher1.IncludeSubdirectories = True
End Sub


' 変更されたときの処理
Private Sub FileSystemWatcher1_Changed(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed
    MessageBox.Show("変更されました")
End Sub

' 作成されたときの処理
Private Sub FileSystemWatcher1_Created(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Created
    MessageBox.Show("作成されました")
End Sub

' 削除されたときの処理
Private Sub FileSystemWatcher1_Deleted(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Deleted
    MessageBox.Show("削除されました")
End Sub

' リネームされたときの処理
Private Sub FileSystemWatcher1_Renamed(sender As System.Object, e As System.IO.RenamedEventArgs) Handles FileSystemWatcher1.Renamed
    MessageBox.Show("リネームされました")
End Sub

C#の例

// フォームロード時の処理
private void Form3_Load(object sender, EventArgs e)
{
    // 監視するフォルダを設定する
    fileSystemWatcher1.Path = @"C:\Work";
    // フィルターの設定
    fileSystemWatcher1.Filter = "*";
    // 監視対象をファイル&最終書込日時とする
    fileSystemWatcher1.NotifyFilter = System.IO.NotifyFilters.FileName |
        System.IO.NotifyFilters.LastWrite;
    // ★★★指定したパスのサブフォルダを監視する
    fileSystemWatcher1.IncludeSubdirectories = true;
}

// 変更されたときの処理
private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("変更されました");
}

// 作成されたときの処理
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("作成されました");
}

// 削除されたときの処理
private void fileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("削除されました");
}

// リネームされたときの処理
private void fileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e)
{
    MessageBox.Show("リネームされました");
}

[FileSystemWatcher][Tips] ファイルの変更を監視する


前回はFileSystemWatcherコンポーネント(またはクラス)を使用してフォルダを監視する方法について紹介しました。

今回はファイルの変更を監視する方法について紹介します。

ファイルの変更の監視方法もフォルダのときとほぼ同様で、異なる点はNotifyFilterプロパティにIO.NotifyFilters.FileNameを指定するという点です。

またNotifyFilterプロパティにはNotifyFilters列挙体のメンバーを組み合わせて、一度に複数の種類の変更をウォッチすることができます。

下記はファイルの変更を監視する例です。

NotifyFilterプロパティにはFileNameとLastWriteを指定し、作成/変更/削除/リネームを監視しています。

VBの例

' フォームロード時の処理
Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    '監視するファイルがある(または作成される)フォルダを設定する
    FileSystemWatcher1.Path = "C:\Work"
    'フィルターの設定
    FileSystemWatcher1.Filter = "*"
    '★★★監視対象をファイル&最終書込日時とする★★★
    FileSystemWatcher1.NotifyFilter = IO.NotifyFilters.FileName Or IO.NotifyFilters.LastWrite
End Sub

' 変更されたときの処理
Private Sub FileSystemWatcher1_Changed(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed
    MessageBox.Show("変更されました")
End Sub

' 作成されたときの処理
Private Sub FileSystemWatcher1_Created(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Created
    MessageBox.Show("作成されました")
End Sub

' 削除されたときの処理
Private Sub FileSystemWatcher1_Deleted(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Deleted
    MessageBox.Show("削除されました")
End Sub

' リネームされたときの処理
Private Sub FileSystemWatcher1_Renamed(sender As System.Object, e As System.IO.RenamedEventArgs) Handles FileSystemWatcher1.Renamed
    MessageBox.Show("リネームされました")
End Sub

C#の例

// フォームロード時の処理
private void Form2_Load(object sender, EventArgs e)
{
    // 監視するフォルダを設定する
    fileSystemWatcher1.Path = @"C:\Work";
    // フィルターの設定
    fileSystemWatcher1.Filter = "*";
    // ★★★監視対象をファイル&最終書込日時とする★★★
    fileSystemWatcher1.NotifyFilter = System.IO.NotifyFilters.FileName | 
        System.IO.NotifyFilters.LastWrite;
}

// 変更されたときの処理
private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("変更されました");
}

// 作成されたときの処理
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("作成されました");
}

// 削除されたときの処理
private void fileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("削除されました");
}

// リネームされたときの処理
private void fileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e)
{
    MessageBox.Show("リネームされました");
}

[FileSystemWatcher][Tips] フォルダの変更を監視する


FileSystemWatcherコンポーネント(またはクラス)を使用すると、ファイルやフォルダの変更を監視することができます。

まずPathプロパティに監視対象となるパスを設定します。このパス直下のフォルダでの変更を監視することができます。

次にFilterプロパティにフィルターを設定します。フォルダー名称に関係なく監視する場合にはワイルドカード”*”を指定します。もし”A”で始まるフォルダのみを監視対象としたい場合は”A*”と指定します。

監視対象をフォルダとしたいので、NotifyFilterプロパティにIO.NotifyFilters.DirectoryNameを指定します。

監視対象のフォルダに変更があると、ChangedイベントCreatedイベントDeletedイベントRenamedイベントのいずれかが発生します。

下記は、フォルダを監視する例です。

C:\Work以下のフォルダを監視します。

VBの例

' フォームロード時の処理
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    '監視するフォルダを設定する
    FileSystemWatcher1.Path = "C:\Work"
    'フィルターの設定
    FileSystemWatcher1.Filter = "A*"
    '★★★監視対象をディレクトリにする★★★
    FileSystemWatcher1.NotifyFilter = IO.NotifyFilters.DirectoryName
End Sub

' 変更されたときの処理
Private Sub FileSystemWatcher1_Changed(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed
    MessageBox.Show("変更されました")
End Sub

' 作成されたときの処理
Private Sub FileSystemWatcher1_Created(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Created
    MessageBox.Show("作成されました")
End Sub

' 削除されたときの処理
Private Sub FileSystemWatcher1_Deleted(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Deleted
    MessageBox.Show("削除されました")
End Sub

' リネームされたときの処理
Private Sub FileSystemWatcher1_Renamed(sender As System.Object, e As System.IO.RenamedEventArgs) Handles FileSystemWatcher1.Renamed
    MessageBox.Show("リネームされました")
End Sub

C#の例

// フォームロード時の処理
private void Form1_Load(object sender, EventArgs e)
{
    // 監視するフォルダを設定する
    fileSystemWatcher1.Path = @"C:\Work";
    // フィルターの設定
    fileSystemWatcher1.Filter = "A*";
    // ★★★監視対象をディレクトリにする★★★
    fileSystemWatcher1.NotifyFilter = System.IO.NotifyFilters.DirectoryName;
}

// 変更されたときの処理
private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("変更されました");
}

// 作成されたときの処理
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("作成されました");
}

// 削除されたときの処理
private void fileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("削除されました");
}

// リネームされたときの処理
private void fileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e)
{
    MessageBox.Show("リネームされました");
}