Using .NET to Monitor a Directory for Changes

.NET's FileSystemWatcher class can soothe the paranoid control freak in all of us by monitoring a specified folder for different types of file system changes.

The Code

using System;
using System.Text;
using System.IO;

namespace FolderWatcher {
  class Watcher {
    static void Main(string[] args) {
      FileSystemWatcher watcher = new FileSystemWatcher(@"D:\test");
      watcher.IncludeSubdirectories = true;
      watcher.Filter = "";
      watcher.Renamed += new RenamedEventHandler(renamed);
      watcher.Deleted += new FileSystemEventHandler(changed);
      watcher.Changed += new FileSystemEventHandler(changed);
      watcher.Created += new FileSystemEventHandler(changed);
      watcher.EnableRaisingEvents = true;

      Console.ReadKey();
   }

    private static void renamed(object sender, RenamedEventArgs e) {
      Console.WriteLine(DateTime.Now + ": " + 
          e.ChangeType + " " + e.FullPath);
    }

    private static void changed(object sender, FileSystemEventArgs e) {
      Console.WriteLine(DateTime.Now + ": " + 
          e.ChangeType + " " + e.FullPath);
    }
  }
}

FileSystemWatcher watcher = new FileSystemWatcher(@"D:\test");

The core of is application is .NET's FileSystemWatcher class which monitors directories for file system changes.

watcher.IncludeSubdirectories = true;
watcher.Filter = "";

Tells the FileSystemWatcher object to include changes in subdirectories and raise events on every type of file.

An empty string for the filter will match every file and folder in the watched directory. File types and names can also be added to the filter to create a more fine grained watch.

watcher.Renamed += new RenamedEventHandler(renamed);
watcher.Deleted += new FileSystemEventHandler(changed);
watcher.Changed += new FileSystemEventHandler(changed);
watcher.Created += new FileSystemEventHandler(changed);

Sets the types of file system events the FileSystemWatcher object will respond to. The four possible (and self-explanatory) events are: Renamed, Deleted, Changed, and Created. Each EventHandler takes the method to be executed on that particular event as a paramater in its constructor.

watcher.EnableRaisingEvents = true;

The final piece of the puzzle is to finally tell the FileSystemWatcher to start raising events on the specified directory. Once this statement is executed, we will have a live directory watcher.

Creative Commons License

What do you think?