// ToDo: subscribe to parent path if available and adjust filter // eg if D:\ is watched, D:\TEMP can be added there // Set a SubscribedPath property for FileWatcherInfo. // Also change the way FileWatcherInfo applies filters! Must inspect the path! private FileWatcherInfo Subscribe(FileWatcherInfo fileWatcherInfo) { lock (_watchers) { bool foundValidWatcher = false; // Indicates whether we found a useful FileWatcher during the foreach. foreach (var item in _watchers) { // Does the current FileWatcher watch the specified path? if (item.Key == fileWatcherInfo.Path) { foundValidWatcher = !item.Value.IsDisposed; if (foundValidWatcher) { // The watcher is not disposed, add a subscription. _watchers[fileWatcherInfo.Path].AddSubscription(fileWatcherInfo); } else { // No need to keep this disposed watcher referenced. _watchers.Remove(item); } break; } } if (!foundValidWatcher) { // Existing non-disposed watcher is not found, create a new one. var watcher = new FileWatcher(fileWatcherInfo.Path); _watchers.Add(fileWatcherInfo.Path, watcher); watcher.Disposed += FileWatcher_Disposed; watcher.Watching = true; watcher.AddSubscription(fileWatcherInfo); } } return(fileWatcherInfo); }
// ToDo: subscribe to parent path if available and adjust filter // eg if D:\ is watched, D:\TEMP can be added there // Set a SubscribedPath property for FileWatcherInfo. // Also change the way FileWatcherInfo applies filters! Must inspect the path! private FileWatcherInfo Subscribe(FileWatcherInfo fileWatcherInfo) { lock (_watchers) { bool foundValidWatcher = false; // Indicates whether we found a useful FileWatcher during the foreach. foreach (var item in _watchers) { // Does the current FileWatcher watch the specified path? if (item.Key == fileWatcherInfo.Path) { foundValidWatcher = !item.Value.IsDisposed; if (foundValidWatcher) // The watcher is not disposed, add a subscription. _watchers[fileWatcherInfo.Path].AddSubscription(fileWatcherInfo); else // No need to keep this disposed watcher referenced. _watchers.Remove(item); break; } } if (!foundValidWatcher) { // Existing non-disposed watcher is not found, create a new one. var watcher = new FileWatcher(fileWatcherInfo.Path); _watchers.Add(fileWatcherInfo.Path, watcher); watcher.Disposed += FileWatcher_Disposed; watcher.Watching = true; watcher.AddSubscription(fileWatcherInfo); } } return fileWatcherInfo; }