https://stackoverflow.com/a/721743
public class ValidTime { private DateTime _validTo; readonly TimeSpan _validTimeSpan; private ValidTime(TimeSpan validTimeSpan) { _validTimeSpan = validTimeSpan; _validTo = DateTime.Now.Add(_validTimeSpan); } public bool IsValid() => DateTime.Now >= _validTo; public void Reset() => _validTo = DateTime.Now.Add(_validTimeSpan); public static ValidTime From(TimeSpan ts) => new(ts); } public class DirectoryWatcher { readonly ValidTime _watcherValidTime; readonly string _path; readonly Action _action; IDisposable _watcher; public DirectoryWatcher(string path, TimeSpan validTime, Action action) { _watcherValidTime = ValidTime.From(validTime); _path = path; _action = action; } public void UpdateWatcher(bool checkNow = false) { if (_watcher != null && _watcherValidTime.IsValid()) return; _watcherValidTime.Reset(); _watcher?.Dispose(); _watcher = CreateFileWatcher(_path, (object sender, EventArgs e) => _action()); if (checkNow) _action(); } public static IDisposable CreateFileWatcher(string path, EventHandler onSomethingChanged) { var watcher = new FileSystemWatcher { Path = path, IncludeSubdirectories = true, }; // Add event handlers. watcher.Changed += (a, b) => onSomethingChanged(a, b); watcher.Created += (a, b) => onSomethingChanged(a, b); watcher.Deleted += (a, b) => onSomethingChanged(a, b); watcher.Renamed += (a, b) => onSomethingChanged(a, b); // Begin watching. watcher.EnableRaisingEvents = true; return watcher; } }
public IDisposable WatchForFolderChanges(string path, Action<object, object> onSomethingChanged) { var watcher = new FileSystemWatcher { Path = path, IncludeSubdirectories = true, }; // Add event handlers. watcher.Changed += (a, b) => onSomethingChanged(a, b); watcher.Created += (a, b) => onSomethingChanged(a, b); watcher.Deleted += (a, b) => onSomethingChanged(a, b); watcher.Renamed += (a, b) => onSomethingChanged(a, b); // Begin watching. watcher.EnableRaisingEvents = true; return watcher; } public void CreateFileWatcher(string path) { // Create a new FileSystemWatcher and set its properties. FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = path; /* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */ watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; // Only watch text files. watcher.Filter = "*.txt"; // Add event handlers. watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed); // Begin watching. watcher.EnableRaisingEvents = true; } // Define the event handlers. private static void OnChanged(object source, FileSystemEventArgs e) { // Specify what is done when a file is changed, created, or deleted. Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); } private static void OnRenamed(object source, RenamedEventArgs e) { // Specify what is done when a file is renamed. Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath); }
278000cookie-checkC# watch for file changes