Olá a todos. Hoje vou-vos falar do controlo FileSystemWatcher e para isso nada melhor que construir uma aplicação para vermos as potencialidades deste poderoso controlo, simples de usar.
O que é e para que serve?
Este controlo vem facilitar muito a monitorização de ficheiros e pastas, de forma muito simples e intuitiva podemos ver se um ficheiro foi alterado, apagado, criado e renomeado. Lembras-se deste post?
Para isso este objecto disponibiliza-nos 4 eventos:
- Changed -> Quando há uma alteração na pasta ou ficheiro
- Created -> Quando há criação de uma pasta ou ficheiro
- Renamed -> Quando um ficheiro ou pasta é renomeado
- Deleted -> Quando um ficheiro ou pasta é apagado
Estes eventos são disparados assim que alteramos o estado do que estamos a monitorizar.
Para definir o que monitorizar temos estas propriedades:
- Path -> Pasta a monitorizar.
- IncludeSubdirectories -> Se desejar que sub directórios existentes na pasta que está a monitorizar também sejam monitorizados.
- Filter -> Caso deseje apenas monitorizar um tipo de ficheiro, por exemplo ficheiros do tipo *.exe. Ou então o nome completo de um ficheiro, assim só monitoriza esse ficheiro.
Com estas propriedades e eventos do Objecto estamos prontos para monitorizar uma pasta ou ficheiro(s) de uma maneira muito simples e sem muito trabalho.
Aplicação:
A nossa aplicação vai monitorizar a pasta que escolhemos e os ficheiro(s) nela contidos. Depois de cada alteração a aplicação guarda um histórico num ficheiro XML, que depois poderemos ver na janela de histórico.
Nesta imagem podemos ver como vamos tratar os eventos. Todos eles criam uma instância da Classe “DadosFicheiro” que faláramos depois, e passam para esse objecto a localização e o nome do ficheiro alterado e qual o tipo de acção que disparou o evento. Como podem ver o evento “renamed” dá-nos acesso ao nome actual e nome anterior do ficheiro que alteramos.
A classe “DadosFicheiro” tem as propriedades Nome, Acção e datas do ficheiro alterado.
Nesta imagem vemos a nossa classe que tem o atributo [Serializable] que nos vai permitir serializar para XML a classe (já abordamos este tema num tutorial anterior). Temos também uma variável FileInfo que nos vai pemitir aceder aos atributos do ficheiro que foi alterado como o nome e as datas de alteração.
A função “Alterações “ vai serializar para xml a nossa classe, para isso temos que des-serializar o xml para uma lista de “DadosFicheiro” ou seja o xml é sempre todo escrito de novo. Nesta imagem podem ver os métodos que invocamos para serializar e des-serializar.
E temos também o método que devolve uma lista de “DadosFicheiro” que irá servir para preencher o histórico.
Que é preenchido desta maneira.
Chamamos o método getHistorico() que preenche a grid. Guardamos nas settings da aplicação as directorias e o filtro como já fizemos anteriormente.
Com este objecto disponibilizado pelo .NET podemos fazer programas muito facilmente para auditorias, por exemplo um serviço Windows que monitoriza ficheiros e nos envia alertas para o mail, um sistema de backups, etc.
Por hoje é tudo espero que gostem da aplicação, comentem e boa programação.