Я хочу прочитать данные из текстового файла через StreamReader, отредактировать определенную строку и записать ее в файл через StreamWriter

Я хочу читать данные из текстового файла через StreamReader, редактировать определенную строку и записывать ее в файл (не добавлять строки, а обновлять их) через StreamWriter.

Я уже создал файл и заполнил его строками. Следующий код предназначен только для редактирования строки из этого файла.

Код работает плавно, но не обновляет данные. Он просто позволяет строке, как она есть в файле.

var path=@"C:\sample.txt";
StringBuilder data = new StringBuilder();
using (StreamReader read=new StreamReader(path))
{                
     var line = "";
     var fields = line.Split(',');
     while (!read.EndOfStream)
     {
         line = read.ReadLine();
         fields = line.Split(',');
         if (fields[0] == txtAccountNumber.ToString())
              data.AppendLine(fields[0] + "," +
                              fields[1] + "," +
                              account.Balance.ToString());
         else
              data.AppendLine(line);
     }
read.Close();
} 

using(StreamWriter write=new StreamWriter(path))
{                
    write.WriteLine(data);
    write.Flush();
    write.Close();
}

person Xetree    schedule 27.05.2020    source источник
comment
Код txtAccountNumber.ToString() выглядит подозрительно. Если txtAccountNumber - это текстовое поле winforms, вы должны написать txtAccountNumber.Text. Msdn: docs.microsoft.com/en-us/dotnet/api/   -  person mortb    schedule 27.05.2020
comment
Большое спасибо. Вот в чем проблема.   -  person Xetree    schedule 27.05.2020
comment
Я упустил из виду эту часть   -  person Xetree    schedule 27.05.2020
comment
Странный. Как он вообще компилировался?   -  person Matt Evans    schedule 27.05.2020
comment
Хороший глаз @mortb, просто от названия объекта впечатлил!   -  person George Kerwood    schedule 27.05.2020
comment
Я не знаю, но код работал без ошибок.   -  person Xetree    schedule 27.05.2020
comment
Все классы наследуются от object, у которого есть метод .ToString(). Если у класса нет собственной реализации, будет использоваться реализация по умолчанию в object. Реализация по умолчанию выведет имя типа класса. Я сам допустил эту ошибку :)   -  person mortb    schedule 27.05.2020


Ответы (1)


Я нашел ошибку. Я забыл поместить .Text в txtAccountNumber.ToString ()

var path=@"C:\sample.txt";
StringBuilder data = new StringBuilder();
using (StreamReader read=new StreamReader(path))
{                
     var line = "";
     var fields = line.Split(',');
     while (!read.EndOfStream)
     {
         line = read.ReadLine();
         fields = line.Split(',');
         if (fields[0] == txtAccountNumber.Text.ToString()) //*Point of error
              data.AppendLine(fields[0] + "," +
                              fields[1] + "," +
                              account.Balance.ToString());
         else
              data.AppendLine(line);
     }
read.Close();
} 

using(StreamWriter write=new StreamWriter(path))
{                
    write.WriteLine(data);
    write.Flush();
    write.Close();
}
person Xetree    schedule 27.05.2020