visual studio microsoft espaƱol descargar community c# scripting filesystems directory monitor

c# - microsoft - visual studio installer



Detectar cambios en el directorio (2)

Manejamos esto almacenando todos los archivos encontrados en una base de datos junto con su última modificación.

En cada paso a través de los archivos, verificamos la base de datos para cada archivo: si no existe en la base de datos, es nuevo y si existe, pero la marca de tiempo es diferente, ha cambiado.

También hay una opción para manejar los archivos borrados marcando todos los archivos en la base de datos como ToBeDeleteed antes del pase y borrando esto si el archivo fue encontrado. Luego, al final del proceso, podemos simplemente eliminar todos los registros marcados como ToBeDeleted.

Necesito monitorear una carpeta y sus subdirectorios para cualquier manipulación de archivos (agregar / quitar / renombrar). He leído sobre FileSystemWatcher pero me gustaría monitorear los cambios entre cada vez que se ejecuta el programa o cuando el usuario presiona el botón "verificar cambios" (FSW parece más orientado a la detección de tiempo de ejecución). Mi primer pensamiento fue iterar a través de todos los (sub) directorios y hash cada archivo. Luego, concatena todos los hashes (que se han ordenado) y hash eso. Cuando quiero verificar cambios, repito el proceso y verifico si los hashes son los mismos.

¿Es esta una manera eficiente de hacerlo? Además, una vez que haya detectado un cambio, ¿cómo puedo averiguar qué archivo se ha agregado, quitado o cambiado de nombre lo más rápido posible?

Como nota al margen, no me importa usar scripts para hacer esto si son más rápidos, siempre y cuando esos scripts no requieran que los usuarios finales instalen nada y los scripts pueden notificar a mi aplicación C # de los cambios.


Obviamente, necesita hacer "instantáneas" del árbol de directorios y compararlos según sea necesario. Lo que entra exactamente en las instantáneas dependerá de sus requisitos. Manten eso en mente:

  • Necesita almacenar nombres de archivos para detectar archivos "nuevos" y "eliminados"
  • Los tamaños de archivo y los tiempos de última modificación son un indicador bueno y económico de que un archivo ha cambiado o no, pero no proporcionan una garantía
  • Hashing el contenido de los archivos puede ser prohibitivamente costoso si los archivos pueden ser grandes, pero es la única manera de saber que han cambiado con un grado casi perfecto de precisión (recuerde que los hash también pueden colisionar, por lo que si desea matemática 100% certeza de que tampoco va a ser lo suficientemente bueno)