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