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();
}
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!