Olá pessoal, na 2ª parte de nossa série de artigos sobre manipulação de arquivos em C# iremos dar continuidade ao nosso Form criando os métodos dos dois botões restantes, o Alterar e o Excluir.

Faço este artigo com base nas videoaulas de Bruno Belizário, do Portal Linha de Código, mediante autorização do mesmo. Acompanhem o passo-a-passo:

Lembrando que para estes artigos estamos usando as classes FileStream, StreamReader e StreamWriter, todas contidas no namespace System.IO, que é específico para manipular arquivos.

Como dito anteriormente, vamos criar o método do botão Alterar Arquivo. Vá à página de códigos e faça o método a seguir, (o mais trabalhoso dos cinco, já que o objetivo aqui é alterar o arquivo sem perder as informações como data de criação):

private void Alterar()

        {

            try

            {

                //Verifico se o arquivo que desejo abrir existe e passo como parâmetro a variável respectiva

                if (File.Exists(strPathFile))

                {

                    //Instancio o FileStream passando como parâmetro a variável padrão, o FileMode que será

                    //o modo Open e o FileAccess, que será Read(somente leitura). Este método é diferente dos

                    //demais: primeiro irei abrir o arquivo, depois criar um FileStream temporário que irá

                    //armazenar os novos dados e depois criarei outro FileStream para fazer a junção dos dois

                    using (FileStream fs = new FileStream(strPathFile, FileMode.Open, FileAccess.Read))

                    {

                        //Aqui instancio o StreamReader passando como parâmetro o FileStream criado acima.

                        //Uso o StreamReader já que faço 1º a leitura do arquivo. Irei percorrer o arquivo e

                        //quando encontrar uma string qualquer farei a alteração por outra string qualquer

                        using (StreamReader sr = new StreamReader(fs))

                        {

                            //Crio o FileStream temporário onde irei gravar as informações

                            using (FileStream fsTmp = new FileStream(strPathFile + ".tmp",

                                                       FileMode.Create, FileAccess.Write))

                            {

                                //Instancio o StreamWriter para escrever os dados no arquivo temporário,

                                //passando como parâmetro a variável fsTmp, referente ao FileStream criado

                                using (StreamWriter sw = new StreamWriter(fsTmp))

                                {

                                    //Crio uma variável e a atribuo como nula. Faço um while que percorrerá

                                    //meu arquivo original e enquanto ele estiver diferente de nulo...

                                    string strLinha = null;

                                    while ((strLinha = sr.ReadLine()) != null)

                                    {

                                        //faço um indexof para verificar se existe a palavra adicionado,

                                        //se ela existir, a substituo pela palavra alterado

                                        if (strLinha.IndexOf("adicionado") > -1)

                                        {

                                            //uso o método Replace que espera o valor antigo e valor novo

                                            strLinha = strLinha.Replace("adicionado", "alterado");

                                        }

                                        //Chamo o método Write do StreamWriter passando o strLinha como parâmetro

                                        sw.Write(strLinha);

                                    }

                                }

                            }

                        }

                    }

 

                    //Ao final excluo o arquivo anterior e movo o temporário no lugar do original

                    //Dessa forma não perco os dados de modificação de meu arquivo

                    File.Delete(strPathFile);

                   

                    //No método Move passo o arquivo de origem, o temporário, e o de destino, o original

                    File.Move(strPathFile + ".tmp", strPathFile);

                   

                    //Exibo a mensagem ao usuário

                    MessageBox.Show("Arquivo alterado com sucesso!");

                }

                else

                {

                    //Se não existir exibo a mensagem

                    MessageBox.Show("Arquivo não encontrado!");

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

Agora dê dois cliques no botão Alterar Arquivo e chame o método acima no evento do botão:

private void btnAlterar_Click(object sender, EventArgs e)

        {

            Alterar();

        }

Salve, compile e clique no botão. Irá aparecer a seguinte mensagem:

Agora clique no botão Abrir Arquivo e veja a alteração das palavras adicionado por alterado:

Finalizando os métodos dos botões, vamos criar agora o método Excluir Arquivo (o mais simples dos cinco):

private void Excluir()

        {

            try

            {

                //Verifico se o arquivo que desejo abrir existe e passo como parâmetro a variável respectiva

                if (File.Exists(strPathFile))

                {

                    //Se existir chamo o método Delete da classe File para apagá-lo e exibo uma msg ao usuário

                    File.Delete(strPathFile);

                    MessageBox.Show("Arquivo excluído com sucesso!");

                }

                else

                {

                    //Se não existir exibo a mensagem

                    MessageBox.Show("Arquivo não encontrado!");

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

Faça o mesmo que antes, dê dois cliques no botão Excluir Arquivo e chame o método recém-criado:

private void btnExcluir_Click(object sender, EventArgs e)

        {

            Excluir();

        }

Salve, compile e clique no botão Excluir Arquivo. O arquivo será excluído e aparecerá uma mensagem para você.


Teste se o mesmo foi realmente excluído clicando no botão Abrir Arquivo e/ou indo na pasta C:\temp:



Uma boa dica é pra evitar a repetição de código, como feito em nossos if/else em que verificamos por diversas vezes se o arquivo existe, senão exibe uma mensagem, o certo seria se criássemos um método que fizesse essa validação, já que desta forma estaríamos diminuindo o tempo de codificação (mesmo que apenas deixássemos de usar o CTRL + C, CTRL + V!). Fica a dica!

Assim finalizo a 2ª parte de nosso artigo. Na próxima e última parte criaremos caixas de diálogo em nossa aplicação. Aguardem.

Para quem se interessar, disponibilizo o código fonte desse projeto aqui.

Créditos à Bruno Belizário, que fez as videoaulas e ao Portal Linha de Código, por onde pude baixá-las (mediante assinatura), estudá-las e posteriormente fazer este artigo.

Quaisquer dúvidas mandem emails para wellingtonbalbo@gmail.com ou deixem nos comentários deste artigo que responderei o mais rápido possível.

Até o próximo artigo!