
Click here for a larger image.
Environment: VS7, C#, .NET
This program shows a very interesting .NET class, FileSystemWatcher. It enables you to monitor the file system for changes. A single file, a directory, even all files can be monitored. Basically, you create the class; then, you set the NotifyFilter, the starting path, the file name Filter, and event handlers for the events you want to monitor. Finally, you enable events. The event types are: changed, created, deleted, and renamed. The types of changes include changes to size, attributes, security settings, last write, and last access time. The file name Filter allows you to specify all files “”, a particular file “myfile.doc”, or use wild cards like “*.txt”.
StartingDirectory is obvious. The only other parameter is a Boolean IncludeSubdirectories, also obvious. There are three types of event handlers, FileSystemEventHandler, RenamedEventHandler, and ErrorEventHandler.
// TODO: Add any constructor code after InitializeComponent call
m_starting_path.Text = "C:\\
watcher = new FileSystemWatcher();
//---------------------------------------------------------------
// This routine fills in the FileWatcher instance with parameters.
// It checks the CheckBoxes to see what files to report on and
// what routines to use to handle the events. Then it enables
// raising events, allowing file change notification.
private void StartButtonClick(object sender, System.EventArgs e)
{
if (watcher.EnableRaisingEvents == true) {
MessageBeep(100);
return
}
m_file_list.Items.Clear();
watcher.Path = m_starting_path.Text;
watcher.Filter = m_filter.Text;
watcher.NotifyFilter = NotifyFilters.FileName |
NotifyFilters.Attributes |
NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.Security |
NotifyFilters.Size;
if (cb_changed.Checked == true)
watcher.Changed += new FileSystemEventHandler(OnFileEvent);
else watcher.Changed -= new FileSystemEventHandler(OnFileEvent);
if (cb_created.Checked == true)
watcher.Created += new FileSystemEventHandler(OnFileEvent);
else watcher.Created -= new FileSystemEventHandler(OnFileEvent);
if (cb_deleted.Checked == true)
watcher.Deleted += new FileSystemEventHandler(OnFileEvent);
else watcher.Deleted -= new FileSystemEventHandler(OnFileEvent);
if (cb_renamed.Checked == true)
watcher.Renamed += new RenamedEventHandler(OnRenameEvent);
else watcher.Renamed -= new RenamedEventHandler(OnRenameEvent);
if (cb_subdirectory.Checked == true)
watcher.IncludeSubdirectories = true;
else watcher.IncludeSubdirectories = false;
watcher.EnableRaisingEvents = true; //trigger event logging
}
//---------------------------------------------------------------
public void OnFileEvent(object source, FileSystemEventArgs fsea)
{
DateTime dt = new DateTime();
dt = System.DateTime.UtcNow;
m_file_list.Items.Add(dt.ToLocalTime() + " " +
fsea.ChangeType.ToString() + " " +
fsea.FullPath );
}
//---------------------------------------------------------------
public void OnRenameEvent(Object source, RenamedEventArgs rea)
{
DateTime dt = new DateTime();
dt = System.DateTime.UtcNow;
m_file_list.Items.Add(dt.ToLocalTime() + " " +
rea.ChangeType.ToString() +
rea.OldFullPath+ " to " +" " +
rea.FullPath);
}
//---------------------------------------------------------------