System.IO.FileSystemWatcher classe

Este artigo fornece observações complementares à documentação de referência para essa API.

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

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

Há vários tipos de alterações que você pode observar em um diretório ou arquivo. Por exemplo, você pode observar as alterações no Attributes, a data e a LastWrite hora, ou o Size de arquivos ou diretórios. Isso é feito definindo a NotifyFilter propriedade para um dos NotifyFilters valores. Para obter mais informações sobre o tipo de alterações que você pode assistir, 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 operacional Windows notifica o componente sobre alterações de arquivo em um buffer criado pelo FileSystemWatcher. Se houver muitas alterações em um curto espaço de tempo, o buffer pode transbordar. Isso faz com que o componente perca o controle das alterações no diretório e fornecerá apenas uma 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 tão pequeno quanto grande o suficiente para não perder nenhum evento de alteração de arquivo. Para evitar um estouro de buffer, use as NotifyFilter propriedades e IncludeSubdirectories para que você possa filtrar notificações de alteração indesejadas.

Para obter uma lista de valores de propriedade inicial para uma instância de FileSystemWatcher, consulte o FileSystemWatcher construtor.

Considerações ao usar a FileSystemWatcher classe:

  • Os arquivos ocultos não são ignorados.
  • Em alguns sistemas, FileSystemWatcher relata alterações em arquivos usando o formato de nome de arquivo 8.3 curto. Por exemplo, uma alteração para "LongFileName.LongExtension" pode ser relatada como "LongFil~. Lon".
  • Esta classe contém uma demanda de link e uma demanda de herança no nível de classe que se aplica a todos os membros. Um SecurityException é lançado quando o chamador imediato ou a classe derivada não tem permissão de confiança total. Para obter detalhes sobre demandas de segurança, consulte Demandas de link.
  • O tamanho máximo que você pode definir para a InternalBufferSize propriedade para monitorar um diretório pela rede é 64 KB.

Copiar e mover pastas

O sistema operacional e o objeto 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 FileSystemWatcher seu conteúdo. Se você recortar e colar uma pasta com arquivos em uma pasta que está sendo observada, o objeto relatará FileSystemWatcher apenas a pasta como nova, mas não seu conteúdo, porque eles são essencialmente apenas renomeados.

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

Manipulador de Eventos Eventos manipulados É executado
OnChanged Changed, Created, Deleted Relatar 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 arquivo é movido de um diretório para outro, vários OnChanged e alguns OnCreated e OnDeleted eventos podem ser gerados. 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 detectados pelo FileSystemWatcher.
  • O FileSystemWatcher pode assistir discos, desde que eles não são trocados ou removidos. O FileSystemWatcher não gera eventos para CDs e DVDs, porque os carimbos de data/hora e as 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 pode perder um FileSystemWatcher evento quando o tamanho do buffer é excedido. Para evitar a perda de eventos, 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 seu código de manipulação de eventos o mais curto possível.