大家好我编写了一个代码,将我的最后一行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);
}
}
}
}
}
但是如果我在保存时多次点击这就是我需要多次写入该行,如果文件中已存在该行,我必须用新行替换该行。请帮忙
答案 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将文件写入磁盘 - 如果是文件不是太大。