簡體   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