Update a CSV line without having to go through it all C #

0

Would you like to update a specific line of the CSV file? I have the information of which line I want to add information, I currently have the code that runs through the file and when it arrives on the line I want it updates the line and continues writing the rest of the lines, but this is causing me a loss of performance, because my file is too large, if someone knows how to edit using some parameter to go straight in the line like an array?

   public  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();
                tr.Dispose();

            }

            //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";
        }
    }
    
asked by anonymous 05.10.2017 / 20:47

1 answer

0

Code used to pass CSV content to a String List:

 public List<string> PlanilhaCSV(string caminho)
    {
        DataTable dt = new DataTable();
        List<string> lista = new List<string>();

        try
        {
            using (StreamReader rd = new StreamReader(caminho))
            {

                string linha = null;


                while ((linha = rd.ReadLine()) != null)
                {

                    lista.Add(linha.ToString());

                }

                rd.Close();
                rd.Dispose();

                    return lista;


            }
        }

        catch (Exception)
        {

            Console.WriteLine("Não foi possivel localizar o arquivo " + caminho);

        }
        return lista;
    }

// Code used to add an error log on a specified line

     public List<string> AdionaLog(List<string> lista, int linha, string mensagem)
    {
        List<string> linhas = new List<string>();
        int contador = 1;
        foreach (var x in lista)
        {


            if (contador == linha)
                linhas.Add(x + ";" + mensagem);

            else
                linhas.Add(x.ToString());

            contador++;
        }



        return linhas;


    }

// Finally writing the contents of the List

   public void PlanilhaSaida(List<string> lista, string caminho)
    {


        using (TextWriter tw = new StreamWriter(caminho, false, Encoding.UTF8))
        {
            foreach (string l in lista)
            {
                tw.WriteLine(l);
            }

            tw.Close();
        }




    }
    
06.10.2017 / 20:37