public bool Watch(string path, string filter)
        {
            try
            {
                path   = ConvertPathToOSPath(path);
                filter = ConvertPathToOSPath(filter);

                // Check to see if this is a path to a file name
                IsFile = !Directory.Exists(path);
                if (IsFile)
                {
                    // Use the file name as the filter
                    filter = Path.GetFileName(path);
                    // Get the file directory to use as the path
                    path = Path.GetDirectoryName(path);
                }
                Watcher.EnableRaisingEvents = false;
                Watcher.Path   = path;
                Watcher.Filter = filter ?? "*.*";
                Watcher.EnableRaisingEvents = Enabled;
                return(true);
            }
            catch (Exception e)
            {
                var message = string.IsNullOrWhiteSpace(path)
          ? UI.Localization.LocalizeString("RhinoFileWatcher.Watch *error* empty path", 39)
          : string.Format(UI.Localization.LocalizeString("RhinoFileWatcher.Watch *error* parsing path name \"{0}\"", 40), path);
                RhinoApp.WriteLine(message);
                RhinoFileEventWatcherHooks.DumpException(e);
                return(false);
            }
        }
 internal RhinoFileWatcher(IntPtr pointerToIRhinoFileEventWatcher)
 {
     try
     {
         Pointer = pointerToIRhinoFileEventWatcher;
         Watcher = new FileSystemWatcher
         {
             // Disable watching
             EnableRaisingEvents = false,
             // Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories.
             NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName,
         };
         // Add event handlers.
         Watcher.Changed += OnChanged;
         Watcher.Created += OnChanged;
         Watcher.Deleted += OnChanged;
         Watcher.Renamed += OnRenamed;
         // Make sure they watchers are shutdown when closing Rhino
         RhinoApp.Closing += (sender, args) => Dispose();
     }
     catch (Exception exception)
     {
         RhinoFileEventWatcherHooks.ReportException(exception);
     }
 }