private void WatchShares() { Log.Info(LogType.MusicShareWatcher, "Monitoring active for following shares:"); Log.Info(LogType.MusicShareWatcher, "---------------------------------------"); // Release existing FSW Objects first foreach (DelayedFileSystemWatcher watcher in m_Watchers) { watcher.EnableRaisingEvents = false; watcher.Dispose(); } m_Watchers.Clear(); foreach (String sharename in m_Shares) { try { m_Events = ArrayList.Synchronized(new ArrayList(64)); // Create the watchers. //I need 2 type of watchers. 1 for files and the other for directories // Reason is that i don't know if the event occured on a file or directory. // For a Create / Change / Rename i could figure that out using FileInfo or DirectoryInfo, // but when something gets deleted, i don't know if it is a File or directory DelayedFileSystemWatcher watcherFile = new DelayedFileSystemWatcher(); DelayedFileSystemWatcher watcherDirectory = new DelayedFileSystemWatcher(); watcherFile.Path = sharename; watcherDirectory.Path = sharename; /* Watch for changes in LastWrite times, and the renaming of files or directories. */ watcherFile.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Attributes; watcherDirectory.NotifyFilter = NotifyFilters.DirectoryName; // Monitor all Files and subdirectories. watcherFile.Filter = "*.*"; watcherFile.IncludeSubdirectories = true; watcherDirectory.Filter = "*.*"; watcherDirectory.IncludeSubdirectories = true; // Add event handlers. watcherFile.Changed += new FileSystemEventHandler(OnChanged); watcherFile.Created += new FileSystemEventHandler(OnCreated); watcherFile.Deleted += new FileSystemEventHandler(OnDeleted); watcherFile.Renamed += new RenamedEventHandler(OnRenamed); // For directories, i'm only interested in a Delete event watcherDirectory.Deleted += new FileSystemEventHandler(OnDirectoryDeleted); watcherDirectory.Renamed += new RenamedEventHandler(OnRenamed); // Begin watching. watcherFile.EnableRaisingEvents = true; watcherDirectory.EnableRaisingEvents = true; m_Watchers.Add(watcherFile); m_Watchers.Add(watcherDirectory); // Start Timer for processing events m_Timer = new Timer(m_TimerInterval); m_Timer.Elapsed += new ElapsedEventHandler(ProcessEvents); m_Timer.AutoReset = true; m_Timer.Enabled = watcherFile.EnableRaisingEvents; Log.Info(LogType.MusicShareWatcher, sharename); } catch (ArgumentException ex) { Log.Info(LogType.MusicShareWatcher, "Unable to turn on monitoring for: {0} Exception: {1}", sharename, ex.Message); } } Log.Info(LogType.MusicShareWatcher, "---------------------------------------"); Log.Info(LogType.MusicShareWatcher, "Note: Errors reported for CD/DVD drives can be ignored."); }
private void WatchShares() { Log.Info(LogType.MusicShareWatcher, "Monitoring active for following shares:"); Log.Info(LogType.MusicShareWatcher, "---------------------------------------"); // Release existing FSW Objects first foreach (DelayedFileSystemWatcher watcher in m_Watchers) { watcher.EnableRaisingEvents = false; watcher.Dispose(); } m_Watchers.Clear(); foreach (String sharename in m_Shares) { try { m_Events = ArrayList.Synchronized(new ArrayList(64)); // Create the watchers. //I need 2 type of watchers. 1 for files and the other for directories // Reason is that i don't know if the event occured on a file or directory. // For a Create / Change / Rename i could figure that out using FileInfo or DirectoryInfo, // but when something gets deleted, i don't know if it is a File or directory DelayedFileSystemWatcher watcherFile = new DelayedFileSystemWatcher(); DelayedFileSystemWatcher watcherDirectory = new DelayedFileSystemWatcher(); watcherFile.Path = sharename; watcherDirectory.Path = sharename; /* Watch for changes in LastWrite times, and the renaming of files or directories. */ watcherFile.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Attributes; watcherDirectory.NotifyFilter = NotifyFilters.DirectoryName; // Monitor all Files and subdirectories. watcherFile.Filter = "*.*"; watcherFile.IncludeSubdirectories = true; watcherDirectory.Filter = "*.*"; watcherDirectory.IncludeSubdirectories = true; // Add event handlers. watcherFile.Changed += new FileSystemEventHandler(OnChanged); watcherFile.Created += new FileSystemEventHandler(OnCreated); watcherFile.Deleted += new FileSystemEventHandler(OnDeleted); watcherFile.Renamed += new RenamedEventHandler(OnRenamed); // For directories, i'm only interested in a Delete event watcherDirectory.Deleted += new FileSystemEventHandler(OnDirectoryDeleted); watcherDirectory.Renamed += new RenamedEventHandler(OnRenamed); // Begin watching. watcherFile.EnableRaisingEvents = true; watcherDirectory.EnableRaisingEvents = true; m_Watchers.Add(watcherFile); m_Watchers.Add(watcherDirectory); // Start Timer for processing events m_Timer = new Timer(m_TimerInterval); m_Timer.Elapsed += new ElapsedEventHandler(ProcessEvents); m_Timer.AutoReset = true; m_Timer.Enabled = watcherFile.EnableRaisingEvents; Log.Info(LogType.MusicShareWatcher, sharename); } catch (ArgumentException ex) { Log.Info(LogType.MusicShareWatcher, "Unable to turn on monitoring for: {0} Exception: {1}", sharename, ex.Message); } } Log.Info(LogType.MusicShareWatcher, "---------------------------------------"); Log.Info(LogType.MusicShareWatcher, "Note: Errors reported for CD/DVD drives can be ignored."); }