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

时间:2014-02-20 09:30:56

标签: c# text save

我有一个列表类型的数组来存储名为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();
}

我不知道每次生成数据都可以保存数据,或者我应该等待完成迭代,然后保存商店列表中的数据。我试了好几次,每次出错都说有一个同名的文本文件! 它显示每次程序生成新文件并且不将所有数据保存在一个文件中。我该怎么办?

4 个答案:

答案 0 :(得分:2)

代码有几个问题:

  1. File.Create("data.txt");行是多余的。
  2. 您尚未关闭FileStream fs1。关闭文件是一种好习惯 一旦你完成它。一个好习惯是使用using关键字 很可能。
  3. 考虑到上述情况,以下是我将如何实施“保存数据” 在文件'部分:

    // 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);
        }
    }
    

答案 1 :(得分:0)

不要使用

File.Create("data.txt");


new FileStream("data.txt", FileMode.OpenOrCreate, FileAccess.Write);

已经创建了一个新文件。

答案 2 :(得分:0)

//File.Create("data.txt"); you don't need this line 
FileStream fs1 = new FileStream("data.txt", FileMode.OpenOrCreate, FileAccess.Write);
每次调用此方法时,

问题都是File.Create覆盖了现有文件

答案 3 :(得分:0)

我会完全摆脱FileStream,你正在创建一个文件,然后使用StreamWriter,它已经可以做到并允许你附加到它。

string myFileName = "data.txt";
bool doIWantToAppendToTheFile = true;
StreamWriter writer = new StreamWriter(myFileName, doIWantToAppendToTheFile);

这样每次都会在文件中添加额外的文本,当然如果你不想仅仅将doIWantToAppendToTheFile设置为false(哦,更改名称,我只是将它们命名为提供一些明晰)。如果您希望每次调用write方法以获得单个数据blob时都需要新文件,则可以在文件名中附加日期时间戳,例如:

string myFileName = "data" + DateTime.Now.ToString(yyyyMMdd-hhmmss) + ".txt";

因此文件名为data20140220100430.txt