[英]How save data in List<> array to a text file (C#)?
我有一个数组的列表类型来存储名为PointDataOutput的数据。 此列表存储带有(i,j)的空间点数据。
如何保存这些数据?
存储方法在另一个类中:
// Storing method
public void ExportPointData(...)
{
theSpace.TheCells[a,b,0].PointDataOutput.Add(theSpace.TheCells[a,b,0].Temperature);
}
int counter = 0;
for (int currentStep = 1; currentStep <= slnParameter.MaxSteps; currentStep++)
{
// data calculation
theSpace.TheCells[a,b,0].Temperature=....;
// calling method of storing
ExportPointData(...)
}
// saving data in file
if (currentStep == MaxSteps)
{
File.Create("data.txt");
FileStream fs1 = new FileStream("data.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter writer = new StreamWriter(fs1);
foreach (double x in theSpace.TheCells[a, b, 0].PointDataOutput)
{
writer.WriteLine(x);
}
writer.WriteLine(theSpace.TheCells[a, b, 0].PointDataOutput.ToString);
writer.Close();
}
我不知道每次生成数据时都可以保存数据,还是应该等待完成迭代,然后才能保存存储列表中的数据。 我试了几次,每次都出错,发现有一个同名的文本文件! 它表明每次程序创建新文件时,都不会将所有数据保存在一个文件中。 我该怎么办?
代码有两个问题:
File.Create("data.txt");
是多余的。 FileStream fs1
。 最好在完成文件后关闭文件。 一个好的习惯是,尽可能使用using
关键字。 考虑到上述情况,这是我将如何实现“将数据保存在文件中”部分的方法:
// saving data in file
if (currentStep == MaxSteps)
{
using (FileStream fs1 = new FileStream("data.txt", FileMode.OpenOrCreate,
FileAccess.Write))
using (StreamWriter writer = new StreamWriter(fs1))
{
foreach (double x in theSpace.TheCells[a, b, 0].PointDataOutput)
{
writer.WriteLine(x);
}
writer.WriteLine(theSpace.TheCells[a, b, 0].PointDataOutput.ToString);
}
}
不要使用
File.Create("data.txt");
new FileStream("data.txt", FileMode.OpenOrCreate, FileAccess.Write);
已经创建一个新文件。
//File.Create("data.txt"); you don't need this line
FileStream fs1 = new FileStream("data.txt", FileMode.OpenOrCreate, FileAccess.Write);
问题是File.Create
每次调用此方法File.Create
覆盖现有文件
我将完全摆脱FileStream,您先创建一个文件,然后使用StreamWriter
可以完成此操作并允许您附加到该文件。
string myFileName = "data.txt";
bool doIWantToAppendToTheFile = true;
StreamWriter writer = new StreamWriter(myFileName, doIWantToAppendToTheFile);
然后,这每次都会向您的文件中添加其他文本,当然,如果您不想追加,只需将doIWantToAppendToTheFile
设置为false(哦,并更改名称,我只是以这样的方式命名它们以提供一些清晰度)。 如果每次调用write方法都需要单独的数据块时都想要新文件,则可以在文件名后附加一个日期时间戳,例如:
string myFileName = "data" + DateTime.Now.ToString(yyyyMMdd-hhmmss) + ".txt";
因此文件data20140220100430.txt
为data20140220100430.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.