Usuário com melhor resposta
Editar arquivo TXT

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; } } }
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
Todas as Respostas
-
-
-
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:
-
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
-