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

Posted

技术标签:

【中文标题】如何将 List<> 数组中的数据保存到文本文件(C#)?【英文标题】:How save data in List<> array to a text file (C#)? 【发布时间】:2014-02-20 09:30:55 【问题描述】:

我有一个列表类型的数组来存储名为 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"); 行是多余的。 您还没有关闭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);
    

【讨论】:

【参考方案2】:
//File.Create("data.txt"); you don't need this line 
FileStream fs1 = new FileStream("data.txt", FileMode.OpenOrCreate, FileAccess.Write);

问题是File.Create 每次调用此方法时都会覆盖现有文件

【讨论】:

【参考方案3】:

不要使用

File.Create("data.txt");


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

已经创建了一个新文件。

【讨论】:

【参考方案4】:

我会完全摆脱 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

【讨论】:

以上是关于如何将 List<> 数组中的数据保存到文本文件(C#)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将从list集合中取出的数据一次性修改,再一次性保存?

如何将 List<KeyValuePairs<int,object>> 保存为 SQLite 表?

java双循环list数据保存问题

java 从数据库中返回来的数据list<Map<String ,Object>> 做拼接处理

如何将数组保存到 C++ 中的文件中?

我把数据保存到List<T>中 在页面上怎么把list中的数据绑定到gridview中