Monitorando arquivos via programação

Neste post mostrarei como monitorar arquivos e diretórios utilizando os recursos que a plataforma .NET oferece.

Para iniciar, vamos criar um novo projeto Console Application no Visual Studio.

Dê um nome para este projeto, no meu caso eu chamei de VigiaArquivos.

A nível didático iremos monitorar a criação, alteração e deleção de arquivos de texto que estão dentro de uma determinada pasta do usuário.

Importe o namespace System.IO com a seguinte instrução:

using System.IO;

Isto permitirá utilizar as classes que trabalham com arquivos e diretórios, onde é possível criar novos, alterar, remover e assim por diante, mas neste post vamos trabalhar com a classe FileSystemWatcher  ajustando a propriedade Path para informar o caminho do diretório  e a propriedade Filter que irá definir quais extensões de arquivos será monitorado.

Criei na minha máquina um diretório chamado MinhaPasta dentro da C:\, e nela existem alguns arquivos de texto que serão monitorados pela aplicação.

// Estabelece a rota dos arquivos para monitorar
FileSystemWatcher watcher = new FileSystemWatcher();
try
{
        watcher.Path = @"C:\MinhaPasta";
}
catch(Exception e)
{
       Console.WriteLine("\nOcorreu um erro: " + e.Message);
       return;
 }

Na propriedade NotifyFilter, devemos informar quais são os atributos dos arquivos que devem ser monitorados, neste exemplo estou monitorando somente o momento da última alteração, o nome, e o nome do diretório. As outras opções disponíveis estão comentadas.

 watcher.NotifyFilter = NotifyFilters.LastWrite
                | NotifyFilters.FileName
                | NotifyFilters.DirectoryName;
                //NotifyFilters.LastAccess
                //| NotifyFilters.Attributes
                //| NotifyFilters.CreationTime
                //| NotifyFilters.Security
                //| NotifyFilters.Size
// Somente vigiará os arquivos de texto
watcher.Filter = "*.txt";

Você poderá escolher manipular os eventos Changed, Created e Deleted utilizando o delegate FileSystemEventHandler. Este delegate pode chamar qualquer método que corresponda com o seguinte padrão:

void MeuEvento(object source, FileSystemEventArgs e)

O evento Renamed pode ser manipulado por qualquer método que corresponda à seguinte assinatura:

void MeuEvento(object source, RenamedEventArgs e)

 

 // Manipuladores (delegates) de eventos
 watcher.Changed += new FileSystemEventHandler(onChanged);
 watcher.Created += new FileSystemEventHandler(onChanged);
 watcher.Deleted += new FileSystemEventHandler(onDeleted);
 watcher.Renamed += new RenamedEventHandler(onRenamed);
 // Começa a vigiar o diretório
watcher.EnableRaisingEvents = true;

Método que informa a alteração do arquivo.

private static void onChanged(object sender, FileSystemEventArgs e)
{
   Console.WriteLine("Arquivo: {0} \t Tipo de Alteração: {1}", e.Name, e.ChangeType);
}

Método que informa que o arquivo foi excluído

private static void onDeleted(object sender, FileSystemEventArgs e)
{
   Console.WriteLine("O arquivo {0} foi excluído.", e.Name);
}

 private static void onRenamed(object sender, RenamedEventArgs e)
 {
   Console.WriteLine("O arquivo {0} foi renomeado para: {1}", e.OldName, e.Name);
 }

vejam o resultado da execução do aplicativo:

O projeto do Visual Studio está disponível para download aqui.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s