Criação do Projeto - Monitorando Arquivos e Diretórios com FileSystemWatcher - Parte 2

Neste artigo iremos começar a criação do projeto, em que iremos aplicar os conceitos apresentados na parte anterior do artigo.


Continuando com nosso artigo. Abra o Visual Studio, crie uma nova aplicação Windows Form e dê o nome de ExemploFileSystemWatcher.

 No form que é criado, arraste os controles e adicione o componente FileSystemWatcher para que seu form fique da seguinte forma:


 Os ID’s dos controles, na ordem que está no form, 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 form e insira o seguinte código (está comentado para melhor entendimento):

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

using System.IO;

 Agora sim:

private void Form1_Load(object sender, EventArgs e)

{

try

{

//caminho da pasta que o FileSystemWatcher irá monitorar (atribuo o valor do TextBox)

fsw.Path = txtPasta.Text;

 

//tipos de filtro que o FileSystemWatcher irá considerar

fsw.Filter = txtFiltro.Text;

 

//lista de atributos que irão disparar eventos

fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.CreationTime;

 

//permitir a monitoração (sem o valor estar como true, é impossível do FSW monitorar os arquivos)

fsw.EnableRaisingEvents = cboHabilitaEventos.Checked;

 

//monitorar subdiretórios (atribuo o valor do checkbox. Como está checado, assume o valor true)

fsw.IncludeSubdirectories = cboIncluirSubDiretorios.Checked;

 

//uso a propriedade abaixo como false para evitar o erro de chamada ilegal de thread, que pode

//acessar um controle em outra thread aconteça. Se isso acontecer, será disparado uma exceção.

CheckForIllegalCrossThreadCalls = false;

 

//uso do WaitForChangedResults (mostrado no artigo) para Windows Services e Console Application's

 

//instancio a classe WaitForChangedResults, passando o FSW com o método WaitForChanged e dois

//parâmetros: o tipo de modificações que ele irá aguardar, que no caso são todas, e o tempo de

//espera para que sejam disparados estes eventos, que será de 10 segundos.

WaitForChangedResult wcr = fsw.WaitForChanged(WatcherChangeTypes.All, 10000);

 

//faço uma verificação, se der Timeout (passar o tempo esperado de 10 segundos),

//disparo um aviso. Se não der Timeout, exibo o Nome do Evento e o Tipo dele.

if (wcr.TimedOut)

{

Console.WriteLine("Já se passaram 10 minutos do evento");

}

else

{

Console.WriteLine("Evento: " + wcr.Name, wcr.ChangeType.ToString());

}

}

catch (Exception)

{

throw;

}

}

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

 Agora voltemos ao form. Abra a ToolBox (CTRL + W + X), arraste o componente FileSystemWatcher para seu form 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:


 Na próxima parte de nosso artigo vamos codificar os eventos e os 4 métodos, referentes à estes eventos para, assim, terminarmos nosso projeto.

 Assim finalizo o artigo. Muito obrigado a todos!

 Um abraço, e até o próximo artigo

 Wellington Balbo de Camargo

 wellingtonbalbo@gmail.com

Artigos relacionados