C # - Arquivos textos - Inserindo texto em uma linha específica


Você sabe como abrir um arquivo texto, ler o seu conteúdo e exibi-lo em um formulário Windows ?

É uma tarefa simples de ser feita usando as classes da linguagem C#.

E se você precisar inserir um texto em uma determinada linha de um arquivo texto existente ?

Essa também é simples de fazer e eu vou mostrar uma das maneiras de implementar a solução para resolver esta questão.

Para isso vou usar o Visual C# 2010 Express Edition.

Abra o Visual C# 2010 Express Edition e crie um novo projeto do tipo Windows Forms com o nome InserindoTexto;

A seguir inclua 4 Textos, 4 Label e 2 Buttons no formulário form1.cs conforme o leiaute abaixo:

Controles usados no formulário:

TextBox:

  1. txtNomeArquivoTexto - Nome do arquivo Texto existente;
  2. txtTextoAInserir (Multiline= True) - Texto a inserir no arquivo texto;
  3. txtNumeroLinha - Número da linha a partir da qual o texto será inserido;
  4. txtArquivo (Multiline= True) - Conteúdo exibido do arquivo Texto existente já alterado;

Button:

  1. btnInserirTexto - Insere o texto a partir da linha definida no arquivo texto existente;
  2. btnRecolhe - recolhe o formulário ao seu tamanho original;

Não vou detalhar os controles Labels somente a label que exibe o nome do arquivo: lblArquivo

Os namespaces usados no formulário do projeto são:

using System;
using System.Windows.Forms;
using System.IO;
using System.Collections;

Vamos definir uma variável do tipo StreamReader com o nome rdr no início do formulário:

StreamReader rdr = null;

No evento Click do botão - Inserir Texto no Arquivo - digite o código abaixo:

private void btnInserirTexto_Click(object sender, EventArgs e)
 {   
       //realiza a validação dos dados entrados pelo usuário
            if (txtNomeArquivoTexto.Text == string.Empty)
            {
                MessageBox.Show("Informe o nome do arquivo texto.");
                return;
            }

            if (txtTextoAInserir.Text == string.Empty)
            {
                MessageBox.Show("Informe o texto a inserir.");
                return;
            }

            if (txtNumeroLinha.Text == string.Empty)
            {
                MessageBox.Show("Informe o número da linha onde inserir o texto.");
                return;
            }

            string nomeArquivo = txtNomeArquivoTexto.Text;
            string textoInserir = txtTextoAInserir.Text;
            int numeroLinha = Convert.ToInt32(txtNumeroLinha.Text);
            //cria o arraylist
            ArrayList linhas = new ArrayList();
            //verifica se o arquivo existe
            if (File.Exists(nomeArquivo))
            {
                try
                {   //lê o arquivo texto
                    rdr = new StreamReader(nomeArquivo);
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Erro ao acessar o arquivo : " + ex.Message);
                    return;
                }
            }
            else
            {
                MessageBox.Show("O arquivo : " + nomeArquivo + " não existe...");
                return;
            }

            string linha;
            //percorre o arquivo texto linha a linha e inclui cada linha no arraylist
            while ((linha = rdr.ReadLine()) != null)
            {
                try
                {   //inclui a linha o ArrayList
                    linhas.Add(linha);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao acessar o arquivo : " + ex.Message);
                    return;
                }
            }
            rdr.Close();
            //inclui o texto no array  a partir da linha definida
            if (linhas.Count > numeroLinha)
                linhas.Insert(numeroLinha, textoInserir);
            else
                linhas.Add(textoInserir);
            //Abre o arquivo texto para escrita
            StreamWriter wrtr = new StreamWriter(nomeArquivo);
            //escreve o arraylist ja com a linha inserida no arquivo texto
            foreach (string strNovaLinha in linhas)
            {
                wrtr.WriteLine(strNovaLinha);
            }
            wrtr.Close();
            //exibe o conteúdo atual do arquivo texto
            txtArquivo.Text = AbreArquivoTexto(nomeArquivo);
 }

No código acima após efetuar a validação criamos um ArrayList e lemos o arquivo usando um StreamReader e preenchemos o controle ArrayList com o seu conteúdo;

A seguir fechamos o StreamReader e usando as propriedades Count, Insert e Add do ArrayList realizamos a inclusão de um texto no arraylist e depois usando um StreamWrite escrevemos o arraylist no arquivo texto existente.

Ao término chamamos a rotina AbreArquivoTexto() para exibir o conteúdo do arquivo texto alterado no formulário.

O código da rotina AbreArquivoTexto() é dada a seguir:

   public string AbreArquivoTexto(string caminho)
        {
          
 //aumenta o tamanho do form
            this.Height = 620;
            this.Width = 450;
   
        //exibe o nome do arquivo lido
            lblArquivo.Text = caminho;

          
 // Cria StreamReader
            StreamReader sr;
          
 // Verifica se o Arquivo Existe
            if (!File.Exists(caminho))
            {
                throw (new FileNotFoundException("Não foi Possível Localizar o Arquivo Especificado"));
            }

       
    // Inicializa o StreamReader e retorna o conteudo
            using (sr = new StreamReader(caminho))
            {
                return sr.ReadToEnd();
            }
        }

Executando o projeto teremos o formulário form1.cs apresentando para que o usuário informe o nome do arquivo texto, o texto a inserir e linha a partir da qual o texto será inserido;

Após entrar com essas informações e clicar no botão - Inserir Texto no Arquivo - teremos o seguinte resultado:

O arquivo texto é lido e apresentando no formulário já com o seu conteúdo alterado.

Pegue o projeto completo aqui: InserindoTexto.zip

Rom 3:11 Não há quem entenda; não há quem busque a Deus.
Rom 3:12
Todos se extraviaram; juntamente se fizeram inúteis. Não há quem faça o bem, não há nem um só.
Rom 3:13
A sua garganta é um sepulcro aberto; com as suas línguas tratam enganosamente; peçonha de áspides está debaixo dos seus lábios;
Rom 3:14
a sua boca está cheia de maldição e amargura.
Rom 3:15
Os seus pés são ligeiros para derramar sangue.
Rom 3:16
Nos seus caminhos há destruição e miséria;

Rom 3:17
e não conheceram o caminho da paz.

Referências:


José Carlos Macoratti