public WatchingFileReaderProvider(ApplicationEvents events) { this.events = events; configFileWatcher = new FileSystemWatcher(GetConfigDirectory(), WatchedFilesFilter) { NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.DirectoryName | NotifyFilters.FileName }; configFileWatcher.Created += OnFileChanged; configFileWatcher.Changed += OnFileChanged; configFileWatcher.Renamed += (sender, e) => events.OnConfigurationChanged(); configFileWatcher.Deleted += (sender, e) => events.OnConfigurationChanged(); configFileWatcher.EnableRaisingEvents = true; }
private void OnFileChanged(object sender, FileSystemEventArgs e) { try { // This is needed, because we might receive Changed events while file is still open and written FileInfo file = new(e.FullPath); using (var fileStream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None)) { fileStream.Close(); } events.OnConfigurationChanged(); } catch (IOException) { } }