Share via


Cómo: Configurar instancias de componentes FileSystemWatcher

Actualización: noviembre 2007

Hay varias propiedades que se pueden establecer en las instancias de componentes FileSystemWatcher para determinar su comportamiento. Estas propiedades determinan qué directorios y subdirectorios supervisará la instancia del componente y los acontecimientos exactos que, dentro de estos directorios, producirán eventos.

Especificar los directorios que se van a inspeccionar

Se utilizan dos propiedades para determinar qué directorios debería inspeccionar el componente FileSystemWatcher: Path y IncludeSubdirectories.

Para indicar la ruta de acceso completa del directorio raíz que se va a inspeccionar

  • Establezca la propiedad Path en una instancia de componente existente, como se muestra en el código siguiente:

    Dim MyWatcher As New System.IO.FileSystemWatcher()
    MyWatcher.Path = "c:\"
    
         System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher();
            MyWatcher.Path = "c:\\";
    

    Este parámetro puede especificarse con la notación estándar para rutas de acceso de directorios (c:\directorio) o en formato UNC (\\servidor\directorio).

La propiedad IncludeSubdirectories indica si se deben supervisar los subdirectorios del directorio raíz. Si la propiedad se establece en true, el componente inspecciona los mismos cambios tanto en los subdirectorios como en el directorio principal que está inspeccionando.

Especificar los cambios que se van a inspeccionar

Además de especificar los directorios y subdirectorios que se van a inspeccionar, puede indicar qué archivos específicos y qué tipos de cambios desea inspeccionar. En parte, puede determinar los cambios que se van a inspeccionar definiendo controladores para los eventos en que esté interesado. Por ejemplo, si sólo desea recibir una notificación cuando se creen archivos, sólo controlará el evento Created. No obstante, puede establecer una serie de propiedades que restrinjan aún más las actividades del componente.

Puede utilizar la propiedad Filter para indicar un archivo determinado o un modelo de coincidencia de caracteres comodín que limite la inspección por parte del componente a sólo ciertos archivos o directorios del directorio raíz. Por ejemplo, si desea inspeccionar la creación de archivos de texto dentro de la raíz, podría establecer la propiedad Filter en "*.txt" y crear, a continuación, un controlador para el evento Created. Puede establecer el filtro en cualquier valor, incluidas todas las extensiones de archivo válidas. El valor predeterminado "*.*" devuelve todo; "" (cadena vacía) también devuelve todos los archivos o directorios. Sin embargo, sólo se puede establecer una cadena de filtro a la vez. Si es necesario, puede cambiar el filtro después de que FileSystemWatcher haya empezado a recibir eventos.

Nota:

El componente FileSystemWatcher está diseñado para inspeccionar los cambios que se producen dentro de un directorio, no los cambios de los propios atributos del directorio. Por ejemplo, si está inspeccionando un directorio denominado c:\MisProyectos, el componente supervisará los cambios que se produzcan dentro del directorio, pero no los cambios del propio directorio.

También puede utilizar la propiedad NotifyFilter para restringir más los cambios a los que se reacciona. Puede establecer la propiedad NotifyFilter para que se inspeccionen los cambios que se produzcan en los nombres de directorio, en los nombres de archivo o en ambos. Además, la propiedad NotifyFilter contiene una serie de valores que restringen el evento Changed. El evento Changed tiene la capacidad de producir un gran número de eventos, porque provoca un evento cada vez que tiene lugar un cambio en el archivo en cuestión; algunas operaciones estándar, como copiar y mover archivos, producen realmente varios eventos de cambios de archivo, porque alteran atributos como el tamaño, la fecha en que se escribió por última vez y la fecha en que se utilizó por última vez.

La propiedad NotifyFilter limita el número de cambios de archivo o directorio para los que la instancia del componente produce eventos. Puede configurar el componente para que produzca eventos sólo cuando cambie el nombre de un archivo o directorio, cuando cambien los atributos de un elemento del directorio principal, cuando cambie el tamaño de un archivo, cuando cambie la fecha en que se escribió o se utilizó por última vez, o cuando cambien el acceso de seguridad a un archivo o los derechos de un directorio. Todos estos valores son parte de la enumeración NotifyFilters. Puede establecer varios cambios para que sean inspeccionados mediante el operador BitOr (para Visual Basic) o | (para Visual C#), tal como se muestra en el ejemplo siguiente.

Nota:

Debe establecer la propiedad EnableRaisingEvents en true para que el componente FileSystemWatcher inicie la supervisión de los cambios.

Para configurar una instancia del componente FileSystemWatcher

  1. Cree una instancia del componente FileSystemWatcher. Para obtener más información, vea Cómo: Crear instancias de componentes FileSystemWatcher.

  2. Establezca la propiedad Path en la ruta de acceso completa del directorio raíz que se va a inspeccionar.

    Sugerencia:

    Puede especificar la ruta de acceso con la notación estándar para rutas de acceso de archivos o en formato UNC.

  3. Establezca las propiedades opcionales que desee para la instancia.

    Escenario

    Propiedad

    Valor

    Para inspeccionar los cambios realizados en un nombre de subdirectorio o de archivo específico contenido en la raíz

    Filter

    Expresión de filtro con caracteres comodín que restringe las actividades de supervisión de la instancia.

    Para inspeccionar los cambios que se producen dentro de los subdirectorios que contiene el directorio raíz.

    IncludeSubdirectories

    true O bien, false

    Para inspeccionar sólo cambios concretos en un archivo o subdirectorio cuando se controla el evento Changed, Renamed, Deleted o Created

    NotifyFilter

    Cualquiera de los valores disponibles en la enumeración NotifyFilters.

  4. Habilite la instancia del componente estableciendo la propiedad EnableRaisingEvents en true.

    Por ejemplo, suponga que desea crear una instancia de FileSystemWatcher que inspeccione en un directorio de almacenamiento denominado "reports" la creación de archivos .txt nuevos. También desea supervisar los cambios que se produzcan en informes existentes que se vuelven a ejecutar dinámicamente al cambiar los datos. El componente se configuraría de la manera siguiente:

    ' This needs to be declared in a place where it will not go out of scope.
    ' For example, it would be a class variable in a form class.
    Dim MyWatcher As New System.IO.FileSystemWatcher()
    ' This code would go in one of the initialization methods of the class.
    MyWatcher.Path = "c:\"
    ' Watch only for changes to *.txt files.
    MyWatcher.Filter = "*.txt"
    MyWatcher.IncludeSubdirectories = False
    ' Filter for Last Write changes.
    MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite
    ' Example of watching more than one type of change.
    MyWatcher.NotifyFilter = _
       System.IO.NotifyFilters.LastAccess Or System.IO.NotifyFilters.Size
    ' Enable the component to begin watching for changes.
    MyWatcher.EnableRaisingEvents = True
    
         // This needs to be declared in a place where it will not go out of scope.
            // For example, it would be a class variable in a form class.
            System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher();
            // This code would go in one of the initialization methods of the class.
            MyWatcher.Path = "c:\\";
            // Watch only for changes to *.txt files.
            MyWatcher.Filter = "*.txt";
            MyWatcher.IncludeSubdirectories = false;
            // Enable the component to begin watching for changes.
            MyWatcher.EnableRaisingEvents = true;
            // Filter for Last Write changes.
            MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite;
            // Example of watching more than one type of change.
            MyWatcher.NotifyFilter =
               System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.Size;
    

Vea también

Tareas

Cómo: Crear instancias de componentes FileSystemWatcher

Conceptos

Introducción a la supervisión de eventos del sistema de archivos