Monitoring a Folder using FileSystemWatcher class in .Net
FileSystemWatcher class provided in .Net is used for monitoring the activities in a folder or sub-folders. You can watch the folder for specific types of files or all the types of files. You can watch for changes like creating a file, deleting a file, changing a file content etc. although you can create such applications in VB6, it is a tedious task since you have to write a lot of code for achieving that task. But in .Net this task can be done very easily by using the class called the FileSystemWatcher class.
The namespaces that you have to import for using this class are System.IO and System.Diagnostics. To monitor a folder for any activities all you have to do is to create an instance of the FileSystemWatcher class and set the necessary properties and invoke methods. You have to create handlers for the FileSystem events. With all of these done you are ready to watch the activities on a particular folder in your system. You can also watch for activities on remote folders using this FileSystemWatcher class.
Creating an instance of FileSystemWatcher class is just like creating an instance for other classes. The code for creating an instance would look like,
FileSystemWatcher myFolderWatcher = new FileSystemWatcher();
The properties for the FileSystemWatcher class that needs to be set are the Path and the Filter property. The path property sets the path of the folder that is to be watched. The filter property sets the filter for the types of files to be watched. For example if you want to watch for the activities of the word documents in a folder, you can set the filter property to *.doc.
It is possible to pass the properties and the filters even while you create an instance of the FileSystemWatcher class. If you are passing these properties while you create an instance, the code will look like,
FileSystemWatcher myFolderWatcher = new FileSystemWatcher(d:\\, *.doc);
The properties that are usually used in this class are the Path, EnableRaisingEvents, Filter, IncludeSubdirectories, InternalBufferSize, and NotifyFilter. Setting the IncludeSubdirectories enables you to watch for changes in the subdirectories of the path set. The NotifyFilter property gets or sets the type of changes to look for in the folders/subfolders.
The NotifyFilter property can be set to any of the NotifyFilters enumeration values. The enumeration values that are of interest are, Attributes, CreationTime, DirectoryName, FileName, LastAccess, LastWrite, Security, and Size.
The events for which we usually write code are the Changed, Created, Deleted, Error, and Renamed. The Changed event is raised when a file or directory in the path specified changes. The Created event occurs when file is created. The Deleted event is raised when a file or directory is deleted. The Error event is raised when there is an internal buffer overflow. The Renamed event is raised when a file or directory is renamed.
Some of the protected methods for the FileSystemWatcher class are OnChanged, OnCreated, OnDeleted, OnError, and OnRenamed. There is no need for explanation on what these methods do. The name itself indicates that.
A simple example of a code snippet that is used to track changes to the documents in a folder is given below.
myFolderWatcher.Path = "......give path to the folder here...."
AddHandler myFolderWatcher.Changed, AddressOf ActivityMesg
myFolderWatcher.EnableRaisingEvents = True
In the above code we have first imported the namespaces required and then created an object of FileSystemWatcher class. We have set the path of the folder to be watched for. Set the NotifyFilter property to one of the enumeration values of the enumerator NotifyFilters. Set the FileSystemWatcher objects EnableRaisingEvents to True to start tracking the events.
Add a handler for the Changed event. With this the application would start tracking the changes in the folder mentioned. You can add other events also in the same program and use other NotifyFilters enumeration values to make the program fully functional.
Thus we find that the FileSystemWatcher class is very easy to use to track the activities of a particular folder in your computer or network.