C #: verifica una carpeta para ver los cambios a intervalos regulares?

Tengo una carpeta que contiene una jerarquía de subcarpetas y files.

A intervalos regulares, necesito verificar si algún file / carpeta ha sido modificado / eliminado / agregado.

Estoy pensando en desarrollar desde cero un algorithm que:

  1. Guarda una representación de toda la arborescencia en una database incrustada (como SQLite) o file.
  2. Guarda la sum de comprobación de cada file en la misma database.
  3. En la siguiente llamada, compare esta database con el sistema de files real.
  4. Actualice la información de la database con lo que se ha cambiado.
  5. Repita desde el paso 3.

Pueden ocurrir cambios mientras mi progtwig no se está ejecutando, se puede cerrar / abrir en cualquier momento.
Por ejemplo, el usuario puede cerrar el progtwig el lunes, editar files el martes y volver a abrir el progtwig el miércoles. Necesito comprobar qué cambió durante ese time, así que no puedo usar FileSystemWatcher .

Antes de redevise la rueda, ¿ya hay alguna biblioteca que hace esto?

Nota:

  • No tengo acceso a ningún binary de VCS como git o svn .
  • El lenguaje es C #, pero estoy listo para portar cualquier pequeña biblioteca de Java.
  • Esto es para un software de código abierto , por lo que debe ser una biblioteca de código abierto.
  • Es para incrustar en un widget de escritorio, por lo que cuanto más ligero mejor.

Si no puede usar el FileSystemWatcher (que de todos modos odio, es la class más escabrosa en el marco de IMO), su única otra opción es realizar un seguimiento manual de los files. Necesitará almacenar los nombres de los files y un hash del contenido del file para verificar si los files se agregan / eliminan o cambian. Yo almacenaría esto usando una database SQLExpress o SQLite que tiene un contenedor C #.

Su progtwig verificaría los files al inicio / parada y luego usaría un timer mientras se está ejecutando para verificar periódicamente los files.

Editar: Aclaración del OP, no sé de ninguna biblioteca que haga esto de la caja. Sin embargo, sería trivial implementarlo por su count. Un pequeño DB con una tabla y un control de timer en una aplicación de console o service de Windows harían exactamente lo que necesita.

Probablemente puedas usar FileSystemWatcher (class .NET nativa) para lograr tu propósito.

Está buscando FileSystemWatcher

Escucha las notifications de cambio del sistema de files y genera events cuando cambia un directory o file en un directory.