Controlar las modificaciones de un fichero mediante las notificaciones de sistema

2153 vistas

Windows envía notificaciones que permiten controlar las modificaciones realizadas a un sistema de ficheros.
Para poderlo controlar usaremos la clase System.IO.FileSystemWatcher.



csharp
  1. void Watch(string path, string filter)
  2. {
  3.     // podemos usar los '*' con el filtro
  4.  
  5.     // creación del objeto watcher
  6.     FileSystemWatcher fw = new FileSystemWatcher(path, filter);
  7.    
  8.     // adjuntamos los handlers para controlar los eventos que queramos controlar.
  9.     fw.Changed += new FileSystemEventHandler(OnChanged);
  10.     fw.Renamed += new RenamedEventHandler(OnRenamed);
  11.     fw.Created += new FileSystemEventHandler(OnChanged);
  12.     fw.Deleted += new FileSystemEventHandler(OnChanged);
  13.     fw.Error += new ErrorEventHandler(OnError);
  14.  
  15.     // controlaremos también las subcarpetas
  16.     fw.IncludeSubdirectories = true;
  17.  
  18.     // para poner en marcha el control, tendremos que poner a true EnableRaisingEvents.
  19.     // poniéndolo a false, se parará el control.
  20.     fw.EnableRaisingEvents = true; 
  21. }
  22.  
  23. void OnChanged(Object source, FileSystemEventArgs e)
  24. {
  25.     Console.WriteLine("Fichero {0} {1}", e.FullPath, e.ChangeType);
  26. }
  27.  
  28. void OnRenamed(Object source, RenamedEventArgs e)
  29. {
  30.     Console.WriteLine("Fichero {0} renombrado a {1}", e.OldFullPath, e.FullPath);
  31. }
  32.  
  33. void OnError(Object source, ErrorEventArgs e)
  34. {
  35.     Exception ex = e.GetException();
  36.     Console.WriteLine(ex.ToString());
  37. }



y aquà cómo usar esta función Watch



csharp
  1. // para controlar la actividad de la carpeta c:\rep
  2. Watch(@"c:\rep", "*");