Search code examples
c#file-watcher

Check for the file system watcher in C#


I have written this code for watching files in my system, but its not alerting any modificationms in the folder or file. How can I achieve this? I am not understanding as it does not show any exceptions or errors.

static void Main(string[] args)
{
  FileSystemWatcher();
}

public static void FileSystemWatcher()
{
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = @"D:\watcher";
    watcher.NotifyFilter = NotifyFilters.LastWrite;
    watcher.Filter = "*.*";
    watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.EnableRaisingEvents = true;
    Console.Read();
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
   Console.WriteLine(e.Name + " has changed");
}

Solution

  • I updated the code. The NotifyFilter needs to be expanded if you want to see new files added

        static void Main(string[] args)
        {
            FileSystemWatcher();
        }
    
        public static void FileSystemWatcher()
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = @"D:\temp";
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
       | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.Filter = "*.*";
            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.Created += Watcher_Created;
            watcher.Renamed += Watcher_Renamed;
            watcher.EnableRaisingEvents = true;
            Console.Read();
        }
    
        private static void Watcher_Renamed(object sender, RenamedEventArgs e)
        {
            Console.WriteLine(e.Name + " has been renamed");
        }
    
        private static void Watcher_Created(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine(e.Name + " has been added");
        }
    
        private static void OnChanged(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine(e.Name + " has changed");
        }