private void UpdateInnerWatcher() {
if (_failed) return;
if (Directory.Exists(TargetDirectory)) {
if (_innerWatcher != null) return;
Debug.WriteLine("UPDATE INNER WATCHER: CREATE WATCHER FOR " + TargetDirectory);
_innerWatcher = new FileSystemWatcher {
Path = TargetDirectory,
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName,
Filter = "*",
EnableRaisingEvents = true,
IncludeSubdirectories = true
};
lock (_listeners) {
foreach (var listener in _listeners) {
_innerWatcher.Changed += listener.FileOrDirectoryChanged;
_innerWatcher.Created += listener.FileOrDirectoryCreated;
_innerWatcher.Deleted += listener.FileOrDirectoryDeleted;
_innerWatcher.Renamed += listener.FileOrDirectoryRenamed;
listener.FileOrDirectoryCreated(this, new FileSystemEventArgs(WatcherChangeTypes.Created, TargetDirectory, null));
}
}
} else if (_innerWatcher != null) {
Debug.WriteLine("UPDATE INNER WATCHER: REMOVE WATCHER FOR " + TargetDirectory);
_innerWatcher.EnableRaisingEvents = false;
_innerWatcher.Dispose();
_innerWatcher = null;
lock (_listeners) {
foreach (var listener in _listeners) {
listener.FileOrDirectoryDeleted(this, new FileSystemEventArgs(WatcherChangeTypes.Deleted, TargetDirectory, null));
}
}
}
}