Clase System.IO.FileSystemWatcher
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
Use FileSystemWatcher para observar los cambios en un directorio especificado. Puede observar los cambios en los archivos y subdirectorios del directorio especificado. Puede crear un componente para ver los archivos en un equipo local, una unidad de red o un equipo remoto.
Para observar los cambios en todos los archivos, establezca la Filter propiedad en una cadena vacía ("") o use caracteres comodín ("*.*"). Para ver un archivo específico, establezca la Filter propiedad en el nombre de archivo. Por ejemplo, para observar los cambios en el archivo MyDoc.txt, establezca la Filter propiedad en "MyDoc.txt". También puede observar los cambios en un determinado tipo de archivo. Por ejemplo, para ver los cambios en los archivos de texto, establezca la Filter propiedad en "*.txt".
Hay varios tipos de cambios que puede observar en un directorio o archivo. Por ejemplo, puede observar los cambios en Attributes
, la LastWrite
fecha y hora, o los Size
archivos o directorios. Para ello, establezca la NotifyFilter propiedad en uno de los NotifyFilters valores. Para obtener más información sobre el tipo de cambios que puede ver, vea NotifyFilters.
Puede observar el cambio de nombre, eliminación o creación de archivos o directorios. Por ejemplo, para observar el cambio de nombre de los archivos de texto, establezca la Filter propiedad en "*.txt" y llame al WaitForChanged método con un Renamed especificado para su parámetro.
El sistema operativo Windows notifica a su componente los cambios de archivo en un búfer creado por .FileSystemWatcher Si hay muchos cambios en un breve tiempo, el búfer puede desbordarse. Esto hace que el componente pierda el seguimiento de los cambios en el directorio y solo proporcionará una notificación general. Aumentar el tamaño del búfer con la InternalBufferSize propiedad es costoso, ya que procede de la memoria no paginada que no se puede intercambiar al disco, por lo que mantenga el búfer tan pequeño como lo suficientemente grande como para no perder ningún evento de cambio de archivo. Para evitar un desbordamiento de búfer, use las NotifyFilter propiedades y IncludeSubdirectories para que pueda filtrar las notificaciones de cambio no deseadas.
Para obtener una lista de valores de propiedad iniciales para una instancia de FileSystemWatcher, vea el FileSystemWatcher constructor .
Consideraciones al usar la FileSystemWatcher clase :
- No se omiten los archivos ocultos.
- En algunos sistemas, FileSystemWatcher notifica los cambios en los archivos con el formato de nombre de archivo 8.3 corto. Por ejemplo, un cambio a "LongFileName.LongExtension" podría notificarse como "LongFil~. Lon".
- Esta clase contiene una demanda de vínculo y una demanda de herencia en el nivel de clase que se aplica a todos los miembros. SecurityException Se produce una excepción cuando el llamador inmediato o la clase derivada no tiene permiso de plena confianza. Para obtener más información sobre las demandas de seguridad, consulte Vincular demandas.
- El tamaño máximo que puede establecer para la InternalBufferSize propiedad para supervisar un directorio a través de la red es de 64 KB.
Copiar y mover carpetas
El sistema operativo y FileSystemWatcher el objeto interpretan una acción de cortar y pegar o una acción de movimiento como acción de cambio de nombre para una carpeta y su contenido. Si corta y pega una carpeta con archivos en una carpeta que se está viendo, el FileSystemWatcher objeto solo notifica la carpeta como nueva, pero no su contenido porque básicamente solo se cambia el nombre.
Para recibir una notificación de que el contenido de las carpetas se ha movido o copiado en una carpeta vigilada, proporcione OnChanged y OnRenamed los métodos del controlador de eventos como se sugiere en la tabla siguiente.
Controlador de eventos | Eventos controlados | Rendimiento |
---|---|---|
OnChanged | Changed, , Created, Deleted | Informe de los cambios en los atributos de archivo, los archivos creados y los archivos eliminados. |
OnRenamed | Renamed | Enumere las rutas de acceso antiguas y nuevas de los archivos y carpetas cuyo nombre ha cambiado y expanda de forma recursiva si es necesario. |
Eventos y tamaños de búfer
Tenga en cuenta que varios factores pueden afectar a los eventos de cambio del sistema de archivos que se generan, como se describe a continuación:
- Las operaciones comunes del sistema de archivos pueden generar más de un evento. Por ejemplo, cuando un archivo se mueve de un directorio a otro, se pueden generar varios y algunos OnChangedOnCreated eventos y OnDeleted . Mover un archivo es una operación compleja que consta de varias operaciones simples, por lo que genera varios eventos. Del mismo modo, algunas aplicaciones (por ejemplo, software antivirus) pueden provocar eventos adicionales del sistema de archivos detectados por FileSystemWatcher.
- FileSystemWatcher Puede ver los discos siempre y cuando no se cambien o quiten. FileSystemWatcher No genera eventos para los CD y DVD, porque las marcas de tiempo y las propiedades no pueden cambiar. Los equipos remotos deben tener una de las plataformas necesarias instaladas para que el componente funcione correctamente.
Tenga en cuenta que es posible que se pierda un FileSystemWatcher evento cuando se supere el tamaño del búfer. Para evitar eventos que faltan, siga estas instrucciones:
- Aumente el tamaño del búfer estableciendo la InternalBufferSize propiedad .
- Evite ver los archivos con nombres de archivo largos, ya que un nombre de archivo largo contribuye a rellenar el búfer. Considere la posibilidad de cambiar el nombre de estos archivos con nombres más cortos.
- Mantenga el código de control de eventos lo más corto posible.