none
Editar arquivo TXT RRS feed

  • Pergunta

  • Bom dia.

    Preciso criar uma aplicação que edite um arquivo txt. No meu caso tem um arquivo que na primeira linha fica uma valor e quando o usuário digita no textbox outro valor ele salva neste mesmo arquivo apagando o valor anterior.

    Desde já agradeço pela ajuda!

    Tenho um código que consegui na internet (http://www.macoratti.net/12/01/c_itx1.htm).

    Com esse código e possivel visualizar e inserir dados, se tivesse como adaptar para que antes de inserir ele deletasse o valor anterior antes de inserir um novo e salvar, já resolveria o meu problema.

    using System;
    using System.Windows.Forms;
    using System.IO;
    using System.Collections;
    
    namespace InserindoTexto
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            
            StreamReader rdr = null;
    
            private void btnInserirTexto_Click(object sender, EventArgs e)
            {
                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);
    
                ArrayList linhas = new ArrayList();
    
                if (File.Exists(nomeArquivo))
                {
                    try
                    {
                        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;
    
                while ((linha = rdr.ReadLine()) != null)
                {
                    try
                    {
                        linhas.Add(linha);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Erro ao acessar o arquivo : " + ex.Message);
                        return;
                    }
                }
                rdr.Close();
    
                if (linhas.Count > numeroLinha)
                    linhas.Insert(numeroLinha, textoInserir);
                else
                    linhas.Add(textoInserir);
    
                StreamWriter wrtr = new StreamWriter(nomeArquivo);
    
                foreach (string strNewLine in linhas)
                {
                    wrtr.WriteLine(strNewLine);
                }
                wrtr.Close();
    
                txtArquivo.Text = AbreArquivoTexto(nomeArquivo);
            }
    
            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();
                }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //tamanho normal do formulário
                this.Height = 300;
                this.Width = 450;
            }
    
            private void btnRecolhe_Click(object sender, EventArgs e)
            {
                //tamanho normal do formulário
                this.Height = 300;
                this.Width = 450;
            }
        }
    }
    

    segunda-feira, 12 de junho de 2017 11:52

Respostas

  • Boa tarde RodineyMachado,

    Pelo que estou vendo á uma falha na hora de incluir o novo texto.

    Você esta incluindo o registro na linha porém não esta removendo o que consta nesta linha.

    Seu código está dessa forma

                if (linhas.Count > numeroLinha)
                    linhas.Insert(numeroLinha, textoInserir);
                else
                    linhas.Add(textoInserir);

    Altera para a seguinte forma e faz o teste

                if (linhas.Count > numeroLinha)
                {
                    linhas.RemoveAt(numeroLinha);
                    linhas.Insert(numeroLinha, textoInserir);
                }
                else
                    linhas.Add(textoInserir);


    Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco

    • Marcado como Resposta RodineyMachado segunda-feira, 12 de junho de 2017 19:53
    segunda-feira, 12 de junho de 2017 17:54

Todas as Respostas

  • Bom dia, RodineyMachado.

    Essa seria uma questão de "Break fix/Erro" ou "How to/Customização"?
    segunda-feira, 12 de junho de 2017 12:58
  • Felipe, não sei o que seria "Break fix/Erro" ou "How to/Customização"

    Preciso fazer uma aplicação que alterar o arquivo txt, quando huver valor ele tem que apagar e salvar o ultimo digitado no textbox.

    segunda-feira, 12 de junho de 2017 16:53
  • RodineyMachado

    Sendo assim, por não se tratar de um erro, ou algo a ser consertado, abra como uma discussão, assim junto com a comunidade vocês podem chegar ao melhor meio de realizar a implementação que você deseja.

    Para abrir uma discussão, faça o mesmo processo de abrir uma pergunta, mas ao invés de marcar como pergunta, você marca como uma discussão, assim:


    segunda-feira, 12 de junho de 2017 17:11
  • Boa tarde RodineyMachado,

    Pelo que estou vendo á uma falha na hora de incluir o novo texto.

    Você esta incluindo o registro na linha porém não esta removendo o que consta nesta linha.

    Seu código está dessa forma

                if (linhas.Count > numeroLinha)
                    linhas.Insert(numeroLinha, textoInserir);
                else
                    linhas.Add(textoInserir);

    Altera para a seguinte forma e faz o teste

                if (linhas.Count > numeroLinha)
                {
                    linhas.RemoveAt(numeroLinha);
                    linhas.Insert(numeroLinha, textoInserir);
                }
                else
                    linhas.Add(textoInserir);


    Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco

    • Marcado como Resposta RodineyMachado segunda-feira, 12 de junho de 2017 19:53
    segunda-feira, 12 de junho de 2017 17:54
  • Boa tarde

    Deu certo! Obrigado Alexsandro!

    segunda-feira, 12 de junho de 2017 19:53