Por Geymer Morales Cruz

Compartiendo Información...

Inspeccionar Cambios En Archivos Y Directorios En C#

Investigando mas y mas en C# me he dado cuenta de muchas cosas interesantes que nos pueden servir de mucho en nuestras aplicaciones, esta vez explicare lo básico de un objeto llamado fileSystemWatcher, me surgió la necesidad de examinar o mejor dicho inspeccionar los cambios que podían surgir en un directorio, como por ejemplo saber cuando un archivo es eliminado, creado o que su nombre se haya modificado, por lo que este objeto nos facilita esta tarea.

Para efectos de ejemplo primeramente diseñamos un formulario como el siguiente:



A la hora de de diseñar el formulario anterior agregamos el objeto fileSystemWatcher como se muestra en la imagen:



Ahora pasamos al código, en el evento clic del botón que agregamos en el diseño ponemos lo siguiente:

private void bton_Cambios_Click(object sender, EventArgs e)
{
fileSystemWatcher1.Path ="C:/Users/useradministrador/Desktop";
}


En mi caso el boton se llama bton_Cambios, en la propiedad del objeto fileSystemWatcher1.Path evidentemente lo que le estamos asignando es la direccion en la cual se decea inspeccionar, cabe destacar que tambien se le puede asignar un valor en modo de diseño o dinamicamente con el FolderBrowserDialog como lo muestra la figura:



Ahora bien una ves asignada la direccion a inspeccionar falta darnos cuenta que cambios surgen en esa direccion antes fijada para esto solamente basta buscar los metodos que tenda el objeto fileSystemWatcher para las tareas que buscamos, para esto nos ubicamos en la parte de eventos como lo muestra la imagen, más sencillo aun al lado de las propiedades:




Vemos que hay 4 eventos con que cuenta dicho objeto los cuales son: Changed, Created, Deleted, Renamed. Al lado son los nombres que nosotros le asignemos para utilizarlos, igual podeis asignarle el que gusten.

Una vez que le asignemos al evento un nombre, sigue darnos cuenta cuando surge algún cambio en esa dirección que antes asignamos por lo que el código sería el siguiente:

private void system_changed(object sender, System.IO.FileSystemEventArgs e)
{
MessageBox.Show("El Archivo o Carpeta "+e.Name+ " Ha Cambiado");
}

private void system_created(object sender, System.IO.FileSystemEventArgs e)
{
MessageBox.Show("El Archivo o Carpeta " +e.Name+ " Ha Sido Creado");
}

private void system_deleted(object sender, System.IO.FileSystemEventArgs e)
{
MessageBox.Show("El Archivo o Carpeta " +e.Name+ " Ha Sido Borrado");
}

private void system_renamed(object sender, System.IO.RenamedEventArgs e)
{
MessageBox.Show("El Archivo o Carpeta " +e.Name+ " Ha Sido Renombrado");
}


Vemos que el nombre de cada evento es el nombre que antes asignamos, entonces al darle clic al botón que está en el formulario, este asignara la dirección y estos eventos se pondrán a la “escucha” de cualquier cambio por lo que si surge alguno mostrara un mensaje en pantalla, además hay que enfatizar que e.name contiene el nombre del archivo o carpeta que se creo, elimino o modifico .

Tal vez se preguntaran pero esto ¿para qué? bueno, creo que poniendo de ejemplo mi caso esto me sirvió de mucho para almacenar en una base de datos que usuario de la PC eliminaban archivos txt que contenían datos importantes para el sistema que estaba desarrollando..

Que DIOS les bendiga, y espero les sea de utilidad este tip :)

2 comentarios:

Alfredo dijo...

Tengo una carpeta que comparto en la red con 40 usuarios y quiero saber, además del archivo modificado, quién lo hizo, cosa que no veo en la explicación.

Alfredo dijo...

Tengo una carpeta que comparto en la red con 40 usuarios y quiero saber, además del archivo modificado, quién lo hizo, cosa que no veo en la explicación.