Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

QuickTip: a classe FileSystemWatcher


Fala galera, estava eu um dia destes sem nada para fazer e comecei a brincar com a classe FileSystemWatcher.Basicamente o que esta classe faz é ficar escutando por alterações em uma pasta ou arquivos em uma pasta.Com a classe FileSystemWatcher é possível monitorar mudanças de nome em arquivos e pastas, adição ou criação de arquivos, deleções, etc.A classe possui eventos que podem ser assinados e então serão disparados de acordo com as alterações/ações que ocorrerem ao diretório monitorado, vejamos abaixo:

using System.IO;
    
public 
static void Main (string[] args){
ar watcher = new FileSystemWatcher();
    watcher.Path = "/Users/vquaiato/Desktop/moniorar/";
    watcher.Created += Changed;
    watcher.Changed += Changed;
    watcher.Deleted += Changed;
    watcher.Renamed += Renamed;
    watcher.EnableRaisingEvents = true;
    Console.ReadKey();
    }

O que fazemos acima é criar um objeto do tipo FileSystemWatcher na linha 5 e setamos um path para ele monitorar na linha 6. Este é o path do diretório que iremos fazer o monitoramento.Após, assinamos alguns eventos que irão notificar sobre as mudanças e alterações que ocorrerem.Os eventos Created, Changed e Deleted possuem a mesma assinatura que apenas difere do evento Renamed.Por fim, na linha 13 habilitamos para que o objeto monitore aos eventos, sem marcar esta propriedade para true o monitoramento não será feito.Abaixo estão os métodos para os eventos:

static void Renamed (object sender, RenamedEventArgs e){
onsole.WriteLine("\nArquivo renomeado: {
}
 para {
}
\n\n",e.OldName,e.Name);
    }


static void Changed(object sender, FileSystemEventArgs e) {
onsole.WriteLine("\nTipo: {
}
 \nArquivo: {
}
, Nome: {
}
",e.ChangeType, e.FullPath, e.Name);
    }

Agora vamos brincar um pouco criando, alterando e deletando um arquivo no nosso diretório enquanto a aplicação estiver executando:FileSystemWatcher em ação

(reparem que estou rodando no Mono :D)[Apenas a ação de Raname que não funcionou como o esperado. Na verdade um evento de deleção e um de criação foram disparados. Talvez isso seja particularidade do unix. Alguém sabe se no Windows o comportamento é o mesmo?]É isso galera, espero que seja útil.

Abraços, Vinicius Quaiato.

Voltar

Fork me on GitHub