Как заменить данные из файла, если он уже существует, и записать новые данные - PullRequest
0 голосов
/ 29 сентября 2010

Привет всем, я пишу код для записи моей последней строки представления таблицы данных в файл следующим образом

    private void Save_Click(object sender, EventArgs e)
    {
        if (dataGridView1.Rows.Count > 0)
        {
            List<string> lstContent = new List<string>();

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if ((string)row.Cells[0].Value == "FileControl")
                {
                    lstContent.Add((string)row.Cells[1].Value);

                    string mydata = string.Join(",", lstContent.ToArray());

                    using (StreamWriter sw = new StreamWriter(Append.FileName, true))
                    {
                        sw.WriteLine();
                        sw.Write(mydata);
                    }
                }
            }

        }


    }

Но если я нажимаю несколько раз при сохранении, это записывает эту строку несколько раз, что мне нужноесли эта строка уже существует в файле, я должен заменить эту строку новой строкой.Любая помощь, пожалуйста

1 Ответ

0 голосов
/ 29 сентября 2010

Ваш StreamWriter явно использует файл с append = true.Измените второй параметр конструктора на false, если вы хотите каждый раз перезаписывать файл.Документы здесь .Цитата:

append

Тип: System.Boolean

Определяет, должны ли данные добавляться в файл.Если файл существует и append false, файл перезаписывается.Если файл существует и append is true, данные добавляются в файл.В противном случае создается новый файл.

Исправленный код:

  using (StreamWriter sw = new StreamWriter(Append.FileName, false))
  {
      sw.WriteLine();
      sw.Write(mydata);
  }

Замена данной строки в вашем файле, а не просто перезапись всего файланамного сложнее - этот код не справится.StreamWriter не подходит для этого, вам нужен произвольный доступ и возможность замены одного сегмента данных (строки) другим сегментом данных разной длины, что является дорогостоящей операцией на диске.

Возможно, вы захотите сохранить файлы в памяти в виде контейнера String с и выполнить требуемую замену строки в контейнере, а затем записать файл на диск, используя File.WriteAllLines - это если файл не слишком большой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...