Monitorizar cambios en directorios

En
algunas ocasiones necesitamos comprobar si ha habido cambios en los archivos de
alguno de nuestros directorios, siguiendo repasando el espacio de
nombres System.IO podemos encontrar una clase que nos permite hacer esto, es la
clase FileSystemWatcher.

Voy a dejar un
ejemplo de cómo trabajar con esta clase.

Primero como
siempre añadimos el espacio de nombres:

using
System.IO;

Luego declaramos un
objeto de tipo FileSystemWatcher:

FileSystemWatcher
monitor = new FileSystemWatcher();

Le decimos el
directorio que queremos monitorizar, esto también lo podríamos hacer directamente en el constructor e incluso indicarle la extensión de archivo que nos gustaría monitorizar:

monitor.Path
= @»C:»

Indicamos los
eventos a los que va a responder:

monitor.Created += new
FileSystemEventHandler(monitor_cambia);
monitor.Deleted += new FileSystemEventHandler(monitor_cambia);

Creamos el
manejador al que llama cada evento:

static void
monitor_cambia(object sender, FileSystemEventArgs e)
{
        
MessageBox.Show(e.ChangeType.ToString());
}

Solo queda que el
monitor empiece a vigilar los cambios:

monitor.EnableRaisingEvents
= true;

Este
ejemplo solo busca en un directorio y no en los subdirectorios, si queremos que
busque en los subdirectorios deberemos utilizar la propiedad
IncludeSubdirectories.

monitor.IncludeSubdirectories
= true;

Pues nada más os
dejo todo el código seguido para los que no lo veáis claro 😀

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Monitorizar_directorios
{
    public partial class Form1 :
Form
    {

       
FileSystemWatcher monitor = new FileSystemWatcher();

        public Form1()
        {

InitializeComponent();
monitor.Path = @»C:»
monitor.Created += new FileSystemEventHandler(monitor_cambia);
monitor.Deleted
+= new FileSystemEventHandler(monitor_cambia);
                          
monitor.IncludeSubdirectories = true;

monitor.EnableRaisingEvents = true;


        }

        static void monitor_cambia(object sender, FileSystemEventArgs e)
        {
            MessageBox.Show(e.ChangeType.ToString());
         }
  }

}

 

Saludetes[H]