Ir para conteúdo
Faça parte da equipe! (2024) ×

[Visual Basic C#] Monitorando Arquivos e Diretórios com FileSystemWatcher


TH3 CH4OS
 Compartilhar

Posts Recomendados

Olá pessoal, neste artigo irei criar uma aplicação em Windows Forms para mostrar como monitorar arquivos e diretórios usando o componente do .NET Framework FileSystemWatcher.

 

Faço este artigo com base nas videoaulas de Luiz Maia, do Portal Linha de Código, mediante autorização do mesmo. Seguindo as videoaulas, de início irei falar dos conceitos, propriedades e atributos do FileSystemWatcher e logo depois farei um exemplo prático em Windows Forms demonstrando o uso do mesmo. 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:

 

É necessário se cadastrar para acessar o conteúdo.

 

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

 

É necessário se cadastrar para acessar o conteúdo.

 

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

 

É necessário se cadastrar para acessar o conteúdo.

 

Eventos do FileSystemWatcher:

 

É necessário se cadastrar para acessar o conteúdo.

 

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.

 

Dito tudo isto, vamos à prática.

 

Abra o Visual Studio, crie uma nova aplicação Windows **** e dê o nome de ExemploFileSystemWatcher.

 

No **** que é criado, arraste os controles e adicione o componente FileSystemWatcher para que seu **** fique como mostra a Figura 01:

 

form1.jpg

 

igura 01 – Formulário com seu aspecto final

 

Os ID’s dos controles, na ordem que está no ****, são esses:

 

lblPasta, txtPasta, lblFiltro, txtFiltro, lblNotificacoes, txtNotificacoes, cboHabilitaEventos e cboIncluirSubDiretorios (CheckBoxes), gboFSW (GroupBox), lblArquivoDiretorio, txtArquivoDiretorio, btnCriaArquivo, btnCriaDiretorio e btnDeletaArquivo.

 

Lembrando que esses são os ID’s que eu usei, nada os impede de usar a nomenclatura que mais for favorável e intuitivo a vocês.

 

Como vocês podem ver na imagem acima, no txtPasta deixei um caminho padrão para usarmos neste exemplo e no txtFiltro, deixei como padrão o *.*, que como já dito anteriormente, indica que todos os tipos de arquivos serão monitorados.

 

Agora vamos ao Page_Load da página para fazer com que tudo isto funcione. Para isso, dê dois cliques em cima do **** e insira o seguinte código (está comentado para melhor entendimento):

 

Antes, não se esqueça do using:

 

É necessário se cadastrar para acessar o conteúdo.

 

Agora sim:

 

É necessário se cadastrar para acessar o conteúdo.

 

PS: Não se esqueça de sempre usar Try/Catch em seu código.

 

Agora voltemos ao ****. Abra a ToolBox (CTRL + W + X), arraste o componente FileSystemWatcher para seu **** e deixe o nome padrão dele, fileSystemWatcher1. Ainda nas Propriedades, vá aos eventos do FSW e dê dois cliques em cima de cada evento para chamar o respectivo método, como a Figura 02 ilustra.

 

eventsoffsw.jpg

 

Figura 02 – Eventos do FileSystemWatcher

 

Vamos codificar os métodos chamados por estes eventos.

 

No Changed, faça o seguinte:

 

É necessário se cadastrar para acessar o conteúdo.

 

No Created, faça o seguinte:

 

 

É necessário se cadastrar para acessar o conteúdo.

 

No Deleted, faça o seguinte:

É necessário se cadastrar para acessar o conteúdo.

 

No Renamed, faça o seguinte:

 

É necessário se cadastrar para acessar o conteúdo.

 

Pronto, eventos criados.

 

Agora vamos criar os métodos responsáveis pelos botões CriaArquivo, CriaDiretório e DeletaArquivo. Crie o método CriaArquivo:

 

É necessário se cadastrar para acessar o conteúdo.

 

O CriaDiretório e DeletaArquivo são parecidos, o que muda são as mensagens de aviso apenas e o tipo da classe, que são File e Directory, dependendo do método (no final do artigo, disponibilizarei o código-fonte deste artigo). Agora abra a unidade C: da sua máquina e crie a pasta que o FSW usará para monitorar os arquivos. No meu caso, aqui é a exemploFSW.

 

Agora vamos voltar ao **** e dar dois cliques em cada um dos botões do ****, para chamar os métodos criados anteriormente. Faça desta forma:

 

É necessário se cadastrar para acessar o conteúdo.

 

Pronto, agora compile seu projeto e experimente criar, alterar e excluir arquivos e pastas e veja as notificações que aparecem. A Figura 03 ilustra o projeto em funcionamento:

 

compiledproject.jpg

 

Figura 03 – Notificações sendo exibidas de acordo com as ações escolhidas pelo usuário

 

Para quem se interessar, disponibilizo o código fonte desse projeto aqui.

 

Assim finalizo nosso artigo.

 

Crédito : Wellington Camargo

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.