Olá pessoal, neste artigo iremos ver os conceitos, as propriedades e os eventos do componente do .NET Framework FileSystemWatcher, responsável por monitorar arquivos e diretórios. Acompanhem:

 O FileSystemWatcher é um componente nativo do .NET Framework que tem como função monitorar diretórios e árvores de diretórios disparando eventos e enviando notificações sobre quaisquer alterações que venham a ocorrer nestes diretórios. Desta forma, quando algum diretório ou subdiretório é criado, alterado, renomeado ou excluído, o FileSystemWatcher acaba funcionando como um “dedo duro” informando ao usuário estas ocorrências. Esse componente pode ser usado para monitorar um ou mais computadores locais, remotos ou em rede.

- As principais propriedades do FileSystemWatcher são:

- EnableRaisingEvents – o diretório só será monitorado se esta propriedade estiver “setada” como true.

- Path – será a pasta que será monitorada pelo nosso componente.

- IncludeSubDirectories – valor booleano, se deixarmos true, ele irá monitorar os subdiretórios.

- Filter – é a extensão do arquivo que nosso componente irá filtrar (.txt por exemplo). Se deixarmos o valor padrão (*.*), ele irá filtrar todos os arquivos.

- NotifyFilter – serão os atributos (ou gatilhos) que, ao serem alterados, farão com que nosso componente dispare um determinado evento que irá notificar o usuário que determinado arquivo ou diretório foi alterado.


- Atributos para os Filtros de Notificação (NotifyFilter):

- Attributes – o atributo do arquivo ou diretório.

- CreationTime – a hora que o arquivo ou diretório foi criado.

- DirectoryName – o nome do diretório.

- FileName – o nome do arquivo.

- LastAccess – a data da última abertura do arquivo ou diretório.

- LastWrite – a data da última escrita no arquivo ou diretório.

- Security – as configurações de segurança do arquivo ou diretório.

- Size – O tamanho do arquivo ou diretório.

- Sobrecarga de Métodos:

 Temos três sobrecargas da classe do FileSystemWatcher, que são:

 1ª - Inicia uma nova instância da classe FileSystemWatcher:

FileSystemWatcher fsw = new FileSystemWatcher();

 2ª - Inicia uma nova instância da classe FileSystemWatcher passando como parâmetro a propriedade Path:

FileSystemWatcher fsw = new FileSystemWatcher(@"C:\pasta");

 3ª - Inicia uma nova instância da classe FileSystemWatcher passando como parâmetro as propriedades Path e Filter:

FileSystemWatcher fsw = new FileSystemWatcher(@"C:\pasta", "*.*");

 

- Eventos do FileSystemWatcher:

fsw.Changed += new FileSystemEventHandler(fsw_Changed);

fsw.Created += new FileSystemEventHandler(fsw_Created);

fsw.Deleted += new FileSystemEventHandler(fsw_Deleted);

fsw.Renamed += new RenamedEventHandler(fsw_Renamed);

 Estes serão os quatro eventos que usaremos em nosso exemplo.

 

- Eventos Disparados:

- Changed – disparado sempre que mudanças são feitas no tamanho, atributos, última escrita, último acesso ou permissões de segurança NTFS de um arquivo ou diretório.

- Created – disparado sempre que um diretório é criado.

- Deleted – disparado sempre que um diretório é excluído.

- Renamed – disparado sempre que o nome do diretório ou arquivo é alterado.

 

- Erro: Estouro de Buffer!

 Nosso componente pode receber um grande número de eventos simultâneos, principalmente se o mesmo estiver configurado para rodar em uma rede. Isso pode nos trazer alguns problemas: como o componente usa o Buffer para gerenciar esses eventos, se em um curto período de tempo o Buffer receber muitos eventos, pode ocorrer o erro de Estouro de Buffer, fazendo com que nosso componente perca os dados das alterações realizadas nas pastas e nos envie notificações em branco.

 Para que evitemos este erro, podemos usar o método WaitForChangedResult, que espera que um evento específico ocorra para que possa continuar a execução. Podemos definir este evento de acordo com os atributos especificados abaixo:

- All – A criação, exclusão, alteração ou mudança de nome de arquivo ou diretório.

- Changed – A mudança de arquivo ou diretório. Os tipos de mudança incluem: mudança de tamanho, atributos, definição de segurança, última escrita e hora do último acesso.

- Created – A criação de arquivo ou diretório.

- Deleted – A exclusão de arquivo ou diretório.

- Renamed – A mudança de nome de arquivo ou diretório.

 Então, se algum destes atributos acima for alterado, é disparado nosso evento.

 Na próxima parte iremos criar a aplicação e pôr em prática os conceitos apresentados aqui.

 Assim finalizo o artigo. Muito obrigado a todos!

 Um abraço, e até o próximo artigo

 Wellington Balbo de Camargo

 wellingtonbalbo@gmail.com