quarta-feira, 18 de novembro de 2009

FileWatcher - Observador de arquivos

Muito simples, vamos lá.

1º Crie um projeto do tipo Windows Forms Applications.

2º Adicione uma classe com o nome FileWatcher.

3º Crie uma variável do tipo string, privada com o nome pasta.

private string pasta = @"d:\teste";


4º Crie o construtor da classe conforme abaixo.

public FileWatcher()

{

FileSystemWatcher WatchFile = new FileSystemWatcher(pasta, "*.txt");

WatchFile.Created += new FileSystemEventHandler(this.FileCreated);

WatchFile.EnableRaisingEvents = true;

}


5º Agora vamos criar o método Created, faça conforme abaixo. Esse método irá copiar o arquivo de D:\Teste para D:\Teste2 e xcluí-lo da origem

public void FileCreated(object sender, FileSystemEventArgs e)

{

Console.WriteLine(e.Name);

FileInfo fileInfo = new FileInfo(e.Name);

string pastaOrigem = @"D:\Teste";

string pastaDestino = @"D:\Teste2";

string arquivoOrigem = Path.Combine(pastaOrigem, fileInfo.Name);

string arquivoDestino = Path.Combine(pastaDestino, fileInfo.Name);

if (File.Exists(arquivoDestino))

File.Delete(arquivoDestino);

File.Copy(arquivoOrigem, arquivoDestino);

Log(arquivoOrigem, arquivoDestino);

}


6º Vamos gravar um log disso então? Basta fazer um método como esse. Ele é chamado no final do Created.

private void Log(string preCondicao, string posCondicao)

{

string arquivoLog = Path.Combine(pasta, string.Format("{0}log.txt", string.Format("{0:yyyyMMdd}", DateTime.Now)));

StreamWriter arquivoEscrita = new StreamWriter(arquivoLog, true);

arquivoEscrita.WriteLine(string.Format("{0}|{1}|{2}", preCondicao, posCondicao, DateTime.Now));

arquivoEscrita.Close();

arquivoEscrita.Dispose();

}


7º Instancie um novo FileWacther no Load do formulário.

8º Vamos testar agora, crie uma pasta chamada Teste e uma pasta Teste2, execute a aplicação e crie um arquivo texto (txt) em Teste, veja que o arquivo sumiu! E um novo arquivo chamado AAAAMMDDlog.txt foi criado, esse arquivo contém as informações do nome do arquivo de origem, nome do arquivo destino e data/hora em que ele foi movido. Se você verificar em Teste2 o arquivo estará lá.

OBS: Atenção aos caminhos das pastas, caso não tenha um diretóro D:, coloque no lugar que lhe parecer melhor.

Até a próxima.

Nenhum comentário: