如果已经存在,则如何替换文件中的数据并写入新数据

时间:2010-09-29 11:00:16

标签: c# winforms datagridview

大家好我编写了一个代码,将我的最后一行datagrid视图写入文件,如下所示

    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 :(得分:0)

您的StreamWriter显式使用append = true的文件。如果要每次都覆盖文件,请将构造函数的第二个参数更改为false。文档为here。引用:

  

追加

     

类型:System.Boolean

     

确定   是否要将数据附加到   文件。如果文件存在且追加是   false,文件被覆盖。如果   文件存在,追加是真的,   数据附加到文件。   否则,将创建一个新文件。

修订代码:

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

替换文件中的给定行而不是仅仅覆盖整个文件要困难得多 - 这段代码不会完成它。 StreamWriter并不是很好,你需要随机访问并能够用不同长度的不同数据段替换一个数据段(行),这在磁盘上是一项昂贵的操作。

您可能希望将文件作为String的容器保留在内存中,并在容器中执行所需的行替换,然后使用File.WriteAllLines将文件写入磁盘 - 如果是文件不是太大。