繁体   English   中英

如何将List <>数组中的数据保存到文本文件(C#)?

[英]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();
}

我不知道每次生成数据时都可以保存数据,还是应该等待完成迭代,然后才能保存存储列表中的数据。 我试了几次,每次都出错,发现有一个同名的文本文件! 它表明每次程序创建新文件时,都不会将所有数据保存在一个文件中。 我该怎么办?

代码有两个问题:

  1. File.Create("data.txt"); 是多余的。
  2. 您尚未关闭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.txtdata20140220100430.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM