我正在尝试找到一种更好的方法来将数据写入csv文件。现在,每次循环迭代都会将标题和数据附加到文件中,如下所示
我想修改我的逻辑,以便我只得到像这样的数据。
有关我可以改变的任何提示都非常感谢。感谢
......
var csvContent = new StringBuilder();
csvContent.AppendLine("ONE, TWO, THREE);
var csvPath = defaultFilePath + "file7.csv";
foreach (var i in values)
{
fileData.DataOne = i["DataPointOne"].ToString();
fileData.DataTwo = i["DataPointTwo"].ToString();
fileData.DataThree = DateTime.Parse(i["DataPointThree"]);
csvContent.AppendLine(fileData.DataOne + "," + fileData.DataTwo + "," + fileData.DataThree);
File.AppendAllText(csvPath, csvContent.ToString());
}
......
答案 0 :(得分:4)
您不断将行附加到csvContent
,然后在每次迭代时将其全部写入文件。摆脱StringBuilder
(这里不需要)并使用StreamWriter
这样:
using(var streamWriter = new StreamWriter("path\\toFile.csv"))
{
streamWriter.WriteLine("ONE, TWO, THREE");
foreach (var i in values)
{
fileData.DataOne = i["DataPointOne"].ToString();
fileData.DataTwo = i["DataPointTwo"].ToString();
fileData.DataThree = DateTime.Parse(i["DataPointThree"]);
streamWriter.WriteLine(fileData.DataOne + "," + fileData.DataTwo + "," + fileData.DataThree);
}
}
答案 1 :(得分:0)
问题是,同一StringBuilder
个内容会多次存储到文件中。
迭代1
csvContent
包含第1行的数据 - >第1行存储到文件中。
文件包含第1行
迭代2
csvContent
附加第2行 - >第1,2行附加存储到文件中。
文件包含第1行,第2行
迭代3
csvContent
附加第3行 - >第1,2,3行再次附加到文件中。
文件包含第1,1,2,1,2,3行
简单修复应该是将文件存储在循环外部或使用例如StreamWriter在另一个答案中建议。