Search code examples
c#directoryfilesystemwatcher

Using FileSystemWatcher to detect folder rename


I have a file based application. FileSystemWatcher works fine for most of my uses apart from directory rename. here is an example of the code:

   class Program
{
    static void Main(string[] args)
    {
        var directoryWatcher = new FileSystemWatcher("D:\\Test")
        {
            NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.Attributes | NotifyFilters.FileName | NotifyFilters.LastAccess |
                              NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size,
            Filter = "*.*"
        };
        directoryWatcher.EnableRaisingEvents = true;
        directoryWatcher.IncludeSubdirectories = true;
        directoryWatcher.Changed += FolderChanged;
        directoryWatcher.Created += FolderCreated;
        directoryWatcher.Deleted += FolderDeleted;
        directoryWatcher.Renamed += FolderRenamed;
        Console.ReadLine();
    }

    private static void FolderRenamed(object sender, RenamedEventArgs e)
    {
    }

    private static void FolderDeleted(object sender, FileSystemEventArgs e)
    {
    }

    private static void FolderCreated(object sender, FileSystemEventArgs e)
    {
    }

    private static void FolderChanged(object sender, FileSystemEventArgs e)
    {
    }
}

inside d:\Test there is a folder. once I rename it nothing happens. I get no event whatsoever.

Any ideas?

Thanks

Amit


Solution

  • your code is ok but you are missing notifiers

     watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;
    

    and also

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

    have a look at the full code example here
    https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.renamed(v=vs.110).aspx