c# - files - ¿Cómo detecto cuando un directorio o archivo cambia sin una exploración constante?
get files from directory c# (2)
Aparte de leer todos los archivos y compararlos con una instantánea anterior, ¿hay alguna forma de detectar cuándo un directorio cambia en C # con Windows? No me importa hablar si eso es lo que se necesita.
EDITAR La clase FileSystemWatcher es excelente, pero hay que tener en cuenta que debe iniciar cualquier trabajo en la notificación de devolución de llamada a una tarea / subproceso en segundo plano para evitar el bloqueo que causará eventos perdidos.
He tenido que hacer esto para un programa que vería un directorio y ver si se agregaron nuevos archivos de imagen, y luego los redimensionaría automáticamente. Cuando alguien agrega varios archivos a la vez, el observador no captura todos los archivos, ya que se trata de un solo hilo y estaba ocupado cambiando el tamaño de una imagen mientras se estaba eliminando otra.
Tuve que hacer de esta una aplicación de subprocesos múltiples, donde el hilo principal solo observaba el directorio y agregaba los archivos a una cola, y otro hilo leía de la cola y cambiaba el tamaño de esas imágenes.
Es algo de lo que deberías tener cuidado si vas a hacer algo con los archivos.
Use la clase FileSystemWatcher - hace lo que usted quiere. No le dirá qué bytes en el archivo cambió, pero le dirá qué archivos tienen cambios.
Desde el doc:
Use FileSystemWatcher para observar los cambios en un directorio específico. Puede observar los cambios en los archivos y subdirectorios del directorio especificado. Puede crear un componente para ver archivos en una computadora local, una unidad de red o una computadora remota.
Para observar los cambios en todos los archivos, establezca la propiedad Filtro en una cadena vacía ("") o use comodines (" . "). Para ver un archivo específico, establezca la propiedad Filtro al nombre del archivo. Por ejemplo, para observar los cambios en el archivo MyDoc.txt, establezca la propiedad Filter en "MyDoc.txt". También puede observar los cambios en un determinado tipo de archivo. Por ejemplo, para observar los cambios en los archivos de texto, establezca la propiedad Filtro en "* .txt".
Hay varios tipos de cambios que puede observar en un directorio o archivo. Por ejemplo, puede observar los cambios en los atributos, la fecha y hora de LastWrite o el tamaño de los archivos o directorios. Esto se hace estableciendo la propiedad NotifyFilter en uno de los valores de NotifyFilters. Para obtener más información sobre el tipo de cambios que puede ver, consulte NotifyFilters.
Puede observar el cambio de nombre, la eliminación o la creación de archivos o directorios. Por ejemplo, para observar el cambio de nombre de los archivos de texto, establezca la propiedad Filtro en "* .txt" y llame al método WaitForChanged con un Renombrado especificado para su parámetro.