Write CSV file in certain line passed by parameter C #

0

How to write to a CSV file, in a certain line that I will receive by parameter, example of the beginning of the code:

 public void EscreverCSV(string caminho, int linha, string mensagemErro)

    {
        using (StreamWriter wt = new StreamWriter(caminho))
        {


        }
    }
    
asked by anonymous 03.10.2017 / 16:21

1 answer

0

You can read the file, store each line in a List<> , fetch the line you need to change, and write to the file again.

Remembering that the row index starts at 0.

Follow the commented code:

using System;
using System.Text;
using System.Collections.Generic;
using System.IO;

...

public static string EscreveCSV(string caminho, int linha, string mensagem)
{
    //Só continua se o arquivo informado existir
    if (File.Exists(caminho))
    {
        //lista que irá armazenar cada linha do arquivo
        List<string> linhas = new List<string>();   


        using (TextReader tr = new StreamReader(caminho, Encoding.Default))
        {
            string sLinha = null;
            while ((sLinha = tr.ReadLine()) != null)
            {
                linhas.Add(sLinha); //adiciona cada linha do arquivo à lista
            }

            tr.Close();    
        }

        //Só continua se o arquivo ter um número maior de linhas informadas
        if (linhas.Count > linha)
        {
            linhas[linha] += ";" + mensagem; //adiciona a mensagem informada ao final da linha

            using (TextWriter tw = new StreamWriter(caminho, false, Encoding.Default))
            {
                foreach (string l in linhas)
                {
                    tw.WriteLine(l); //escreve no arquivo novamente
                }

                tw.Close();
            }

            return "Arquivo Escrito com sucesso"; //mensagem de retorno
        }
        else
        {
            return "Arquivo Não possui a linha informada";
        }
    }
    else
    {
        return "Arquivo não existe";    
    }
}

I put it in .NetFiddle: link

    
03.10.2017 / 18:46