FileSystemWatcher Classe

Definição

Escuta as notificações de alteração do sistema de ficheiros e gera eventos quando um diretório, ou ficheiro num diretório, muda.

public ref class FileSystemWatcher : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public ref class FileSystemWatcher : IDisposable
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : IDisposable
[System.IO.IODescription("FileSystemWatcherDesc")]
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type FileSystemWatcher = class
    inherit Component
    interface ISupportInitialize
type FileSystemWatcher = class
    interface IDisposable
[<System.IO.IODescription("FileSystemWatcherDesc")>]
type FileSystemWatcher = class
    inherit Component
    interface ISupportInitialize
Public Class FileSystemWatcher
Inherits Component
Implements ISupportInitialize
Public Class FileSystemWatcher
Implements IDisposable
Herança
FileSystemWatcher
Herança
FileSystemWatcher
Atributos
Implementações

Exemplos

O exemplo seguinte cria um FileSystemWatcher para observar o diretório especificado em tempo de execução. O componente está configurado para observar alterações no LastWrite tempo LastAccess , criação, eliminação ou renomeação de ficheiros de texto no diretório. Se um ficheiro for alterado, criado ou eliminado, o caminho para o ficheiro é impresso para a consola. Quando um ficheiro é renomeado, os caminhos antigo e novo são impressos na consola.

using System;
using System.IO;

namespace MyNamespace
{
    class MyClassCS
    {
        static void Main()
        {
            using var watcher = new FileSystemWatcher(@"C:\path\to\folder");

            watcher.NotifyFilter = NotifyFilters.Attributes
                                 | NotifyFilters.CreationTime
                                 | NotifyFilters.DirectoryName
                                 | NotifyFilters.FileName
                                 | NotifyFilters.LastAccess
                                 | NotifyFilters.LastWrite
                                 | NotifyFilters.Security
                                 | NotifyFilters.Size;

            watcher.Changed += OnChanged;
            watcher.Created += OnCreated;
            watcher.Deleted += OnDeleted;
            watcher.Renamed += OnRenamed;
            watcher.Error += OnError;

            watcher.Filter = "*.txt";
            watcher.IncludeSubdirectories = true;
            watcher.EnableRaisingEvents = true;

            Console.WriteLine("Press enter to exit.");
            Console.ReadLine();
        }

        private static void OnChanged(object sender, FileSystemEventArgs e)
        {
            if (e.ChangeType != WatcherChangeTypes.Changed)
            {
                return;
            }
            Console.WriteLine($"Changed: {e.FullPath}");
        }

        private static void OnCreated(object sender, FileSystemEventArgs e)
        {
            string value = $"Created: {e.FullPath}";
            Console.WriteLine(value);
        }

        private static void OnDeleted(object sender, FileSystemEventArgs e) =>
            Console.WriteLine($"Deleted: {e.FullPath}");

        private static void OnRenamed(object sender, RenamedEventArgs e)
        {
            Console.WriteLine($"Renamed:");
            Console.WriteLine($"    Old: {e.OldFullPath}");
            Console.WriteLine($"    New: {e.FullPath}");
        }

        private static void OnError(object sender, ErrorEventArgs e) =>
            PrintException(e.GetException());

        private static void PrintException(Exception? ex)
        {
            if (ex != null)
            {
                Console.WriteLine($"Message: {ex.Message}");
                Console.WriteLine("Stacktrace:");
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine();
                PrintException(ex.InnerException);
            }
        }
    }
}
Imports System.IO

Namespace MyNamespace

    Class MyClassVB

        Shared Sub Main()
            Using watcher = New FileSystemWatcher("C:\path\to\folder")
                watcher.NotifyFilter = NotifyFilters.Attributes Or
                                       NotifyFilters.CreationTime Or
                                       NotifyFilters.DirectoryName Or
                                       NotifyFilters.FileName Or
                                       NotifyFilters.LastAccess Or
                                       NotifyFilters.LastWrite Or
                                       NotifyFilters.Security Or
                                       NotifyFilters.Size

                AddHandler watcher.Changed, AddressOf OnChanged
                AddHandler watcher.Created, AddressOf OnCreated
                AddHandler watcher.Deleted, AddressOf OnDeleted
                AddHandler watcher.Renamed, AddressOf OnRenamed
                AddHandler watcher.Error, AddressOf OnError

                watcher.Filter = "*.txt"
                watcher.IncludeSubdirectories = True
                watcher.EnableRaisingEvents = True

                Console.WriteLine("Press enter to exit.")
                Console.ReadLine()
            End Using
        End Sub

        Private Shared Sub OnChanged(sender As Object, e As FileSystemEventArgs)
            If e.ChangeType <> WatcherChangeTypes.Changed Then
                Return
            End If
            Console.WriteLine($"Changed: {e.FullPath}")
        End Sub

        Private Shared Sub OnCreated(sender As Object, e As FileSystemEventArgs)
            Dim value As String = $"Created: {e.FullPath}"
            Console.WriteLine(value)
        End Sub

        Private Shared Sub OnDeleted(sender As Object, e As FileSystemEventArgs)
            Console.WriteLine($"Deleted: {e.FullPath}")
        End Sub

        Private Shared Sub OnRenamed(sender As Object, e As RenamedEventArgs)
            Console.WriteLine($"Renamed:")
            Console.WriteLine($"    Old: {e.OldFullPath}")
            Console.WriteLine($"    New: {e.FullPath}")
        End Sub

        Private Shared Sub OnError(sender As Object, e As ErrorEventArgs)
            PrintException(e.GetException())
        End Sub

        Private Shared Sub PrintException(ex As Exception)
            If ex IsNot Nothing Then
                Console.WriteLine($"Message: {ex.Message}")
                Console.WriteLine("Stacktrace:")
                Console.WriteLine(ex.StackTrace)
                Console.WriteLine()
                PrintException(ex.InnerException)
            End If
        End Sub

    End Class

End Namespace

Observações

Use FileSystemWatcher para observar as alterações em um diretório especificado. Você pode observar as alterações nos arquivos e subdiretórios do diretório especificado. Você pode criar um componente para examinar arquivos em um computador local, uma unidade de rede ou um computador remoto.

Para observar alterações em todos os ficheiros, defina a Filter propriedade para uma cadeia vazia ("") ou use curingas ("*.*"). Para observar um arquivo específico, defina a Filter propriedade como o nome do arquivo. Por exemplo, para observar alterações no ficheiro MyDoc.txt, defina a Filter propriedade para "MyDoc.txt". Você também pode observar as alterações em um determinado tipo de arquivo. Por exemplo, para observar alterações em ficheiros de texto, defina a Filter propriedade para "*.txt".

Há vários tipos de alterações que você pode observar em um diretório ou arquivo. Por exemplo, pode observar mudanças em Attributes, na data e hora LastWrite, ou no Size de ficheiros ou diretórios. Isso é feito definindo a NotifyFilter propriedade para um dos NotifyFilters valores. Para mais informações sobre o tipo de alterações que pode-se acompanhar, consulte NotifyFilters.

Você pode observar a renomeação, exclusão ou criação de arquivos ou diretórios. Por exemplo, para observar a renomeação de arquivos de texto, defina a Filter propriedade como "*.txt" e chame o WaitForChanged método com um Renamed especificado para seu parâmetro.

O sistema operativo Windows notifica o seu componente sobre alterações de arquivo em um buffer criado pelo FileSystemWatcher. Se houver muitas alterações num curto espaço de tempo, o buffer pode estourar. Isso faz com que o componente perca o controle das alterações no diretório e ele só fornecerá notificação geral. Aumentar o tamanho do buffer com a InternalBufferSize propriedade é caro, pois ele vem de memória não paginada que não pode ser trocada para o disco, portanto, mantenha o buffer pequeno, mas grande o suficiente para não perder nenhum evento de alteração de arquivo. Para evitar um estouro de buffer, use as propriedades NotifyFilter e IncludeSubdirectories para filtrar notificações de alteração indesejadas.

Para obter uma lista de valores das propriedades iniciais de uma instância de FileSystemWatcher, consulte o construtor FileSystemWatcher.

Considere os seguintes factos ao usar a FileSystemWatcher aula:

  • Ficheiros ocultos não são ignorados.
  • Em alguns sistemas, FileSystemWatcher relata alterações em arquivos usando o formato de nome de arquivo curto 8.3. Por exemplo, uma alteração para "LongFileName.LongExtension" pode ser relatada como "LongFil~.Lon".
  • O tamanho máximo que você pode definir para a InternalBufferSize propriedade para monitorar um diretório pela rede é de 64 KB.

Copiar e mover pastas

O sistema operativo e o objeto FileSystemWatcher interpretam uma ação de cortar e colar, ou uma ação de mover, como uma ação de renomeação para uma pasta e o seu conteúdo. Se cortar e colar uma pasta com ficheiros para uma pasta que está a ser monitorizada, o objeto FileSystemWatcher reporta apenas a pasta como nova, mas não o seu conteúdo, porque foram essencialmente apenas renomeados.

Para ser notificado de que o conteúdo das pastas foi movido ou copiado para uma pasta monitorada, forneça métodos de rotina de eventos OnChanged e OnRenamed como sugerido na tabela a seguir.

Gestor de Eventos Eventos Tratados Executa
OnChanged Changed, Created, Deleted Relate alterações em atributos de arquivo, arquivos criados e arquivos excluídos.
OnRenamed Renamed Liste os caminhos antigos e novos de arquivos e pastas renomeados, expandindo recursivamente se necessário.

Eventos e tamanhos de buffer

Observe que vários fatores podem afetar quais eventos de alteração do sistema de arquivos são gerados, conforme descrito a seguir:

  • Operações comuns do sistema de arquivos podem gerar mais de um evento. Por exemplo, quando um ficheiro é movido de uma pasta para outra, podem ser gerados vários eventos OnChanged e alguns OnCreated e OnDeleted. Mover um arquivo é uma operação complexa que consiste em várias operações simples, portanto, gerando vários eventos. Da mesma forma, alguns aplicativos (por exemplo, software antivírus) podem causar eventos adicionais do sistema de arquivos que são detetados pelo FileSystemWatcher.
  • O FileSystemWatcher pode vigiar os discos desde que não sejam trocados ou removidos. O FileSystemWatcher não gera eventos para CDs e DVDs, porque carimbos de data/hora e propriedades não podem ser alterados. Os computadores remotos devem ter uma das plataformas necessárias instaladas para que o componente funcione corretamente.

Observe que um FileSystemWatcher pode perder um evento quando o tamanho do buffer é excedido. Para evitar eventos ausentes, siga estas diretrizes:

  • Aumente o tamanho do buffer definindo a InternalBufferSize propriedade.
  • Evite observar arquivos com nomes de arquivo longos, porque um nome de arquivo longo contribui para preencher o buffer. Considere renomear esses arquivos usando nomes mais curtos.
  • Mantenha o código de manipulação de eventos o mais curto possível.

Construtores

Name Descrição
FileSystemWatcher()

Inicializa uma nova instância da FileSystemWatcher classe.

FileSystemWatcher(String, String)

Inicializa uma nova instância da FileSystemWatcher classe, dado o diretório especificado e o tipo de ficheiros a monitorizar.

FileSystemWatcher(String)

Inicializa uma nova instância da FileSystemWatcher classe, dado o diretório especificado para monitorizar.

Propriedades

Name Descrição
CanRaiseEvents

Obtém um valor que indica se o componente pode gerar um evento.

(Herdado de Component)
Container

Obtém o IContainer que contém o Component.

(Herdado de Component)
DesignMode

Obtém um valor que indica se o Component está atualmente em modo de design.

(Herdado de Component)
EnableRaisingEvents

Recebe ou define um valor que indica se o componente está ativado.

Events

Obtém a lista de gestores de eventos que estão ligados a isto Component.

(Herdado de Component)
Filter

Obtém ou define a cadeia de filtro usada para determinar que ficheiros são monitorizados num diretório.

Filters

Obtém a coleção de todos os filtros usados para determinar que ficheiros são monitorizados num diretório.

IncludeSubdirectories

Recebe ou define um valor que indica se os subdiretórios dentro do caminho especificado devem ser monitorizados.

InternalBufferSize

Obtém ou define o tamanho (em bytes) do buffer interno.

NotifyFilter

Obtém ou define o tipo de alterações a observar.

Path

Obtém ou define o caminho do diretório para observar.

Site

Obtém ou define um ISite para o FileSystemWatcher.

SynchronizingObject

Obtém ou define o objeto usado para marshalar as chamadas de gestor de eventos emitidas como resultado de uma alteração de diretório.

Métodos

Name Descrição
BeginInit()

Inicia a inicialização de um FileSystemWatcher usado num formulário ou usado por outro componente. A inicialização ocorre em tempo de execução.

CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Dispose()

Liberta os recursos não geridos usados pelo FileSystemWatcher.

Dispose()

Liberta todos os recursos utilizados pelo Component.

(Herdado de Component)
Dispose(Boolean)

Liberta os recursos não geridos usados pelo FileSystemWatcher e opcionalmente liberta os recursos geridos.

EndInit()

Termina a inicialização de um FileSystemWatcher usado num formulário ou usado por outro componente. A inicialização ocorre em tempo de execução.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetService(Type)

Devolve um objeto que representa um serviço fornecido pelo Component ou pelo seu Container.

(Herdado de Component)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()
Obsoleto.

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
OnChanged(FileSystemEventArgs)

Eleva o Changed evento.

OnCreated(FileSystemEventArgs)

Eleva o Created evento.

OnDeleted(FileSystemEventArgs)

Eleva o Deleted evento.

OnError(ErrorEventArgs)

Eleva o Error evento.

OnRenamed(RenamedEventArgs)

Eleva o Renamed evento.

ToString()

Devolve a String contendo o nome do Component, se existir. Este método não deve ser ultrapassado.

(Herdado de Component)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)
WaitForChanged(WatcherChangeTypes, Int32)

Um método síncrono que devolve uma estrutura que contém informação específica sobre a alteração que ocorreu, dado o tipo de alteração que pretende monitorizar e o tempo (em milissegundos) para esperar antes de expirar.

WaitForChanged(WatcherChangeTypes, TimeSpan)

Devolve sincronizadamente uma estrutura que contém informação específica sobre a alteração que ocorreu, dado o tipo de alteração a monitorizar.

WaitForChanged(WatcherChangeTypes)

Um método síncrono que devolve uma estrutura que contém informação específica sobre a alteração que ocorreu, dado o tipo de alteração que pretende monitorizar.

Eventos

Name Descrição
Changed

Ocorre quando um ficheiro ou diretório no especificado Path é alterado.

Created

Ocorre quando um ficheiro ou diretório no especificado Path é criado.

Deleted

Ocorre quando um ficheiro ou diretório no especificado Path é eliminado.

Disposed

Ocorre quando o componente é eliminado por uma chamada ao Dispose() método.

(Herdado de Component)
Error

Ocorre quando a instância de FileSystemWatcher não consegue continuar a monitorizar alterações ou quando o buffer interno transborda.

Renamed

Ocorre quando um ficheiro ou diretório no especificado Path é renomeado.

Aplica-se a

Ver também