[Mono-list] FileSystemWatcher

Joseph Roberts joe.roberts@seiz.com
Fri, 23 May 2003 09:10:41 -0400


I have compiled the following code on linux and on windows,  the program
will run on linux, but the events do not seem to be getting captured on
linux.

Any help/ideas appreciated.

using System;
using System.IO;

public class Watcher
{

   public static void Main()
   {

      try
      {

      string[] args = System.Environment.GetCommandLineArgs();

      // If a directory is not specified, exit program.
      if(args.Length != 2)
      {
         // Display the proper way to call the program.
         Console.WriteLine("Usage: Watcher.exe (directory)");
         return;
      }

      // Create a new FileSystemWatcher and set its properties.
      FileSystemWatcher watcher = new FileSystemWatcher();
      watcher.Path = args[1];

      watcher.IncludeSubdirectories = true;
      /* Watch for changes in LastAccess and LastWrite times, and
           the renaming of files or directories. */
      watcher.NotifyFilter = NotifyFilters.LastAccess |
NotifyFilters.LastWrite
         | NotifyFilters.FileName | NotifyFilters.DirectoryName;
      // Only watch text files.
      watcher.Filter = "*.*";

      // Add event handlers.
      watcher.Changed += new FileSystemEventHandler(OnChanged);
      watcher.Created += new FileSystemEventHandler(OnChanged);
      watcher.Deleted += new FileSystemEventHandler(OnChanged);
      watcher.Renamed += new RenamedEventHandler(OnRenamed);

      // Begin watching.
      watcher.EnableRaisingEvents = true;

      // Wait for the user to quit the program.
      Console.WriteLine("Press \'q\' to quit the sample.");
      while(Console.Read()!='q');
      }
      catch (Exception ex)
      {
         Console.WriteLine(ex.Message);
      }
   }

   // Define the event handlers.
   public static void OnChanged(object source, FileSystemEventArgs e)
   {
      try
      {
         // Specify what is done when a file is changed, created, or
deleted.
         Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
      }
      catch (Exception ex)
      {
         Console.WriteLine(ex.Message);
      }
   }

   public static void OnRenamed(object source, RenamedEventArgs e)
   {
      try
      {
      // Specify what is done when a file is renamed.
      Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath); //,
e.FullPath);
      }
      catch (Exception ex)
      {
         Console.WriteLine(ex.Message);
      }
   }
}