簡體   English   中英

將arraylist寫入文本文件C#

[英]Write arraylist to text file C#

我有一個讀取文本文件並將內容寫入數組列表的方法。 數組列表是全局聲明的,沒有任何元素。 此方法效果很好。

private void LoadArrayList()
{
    try
    {
        string actor;
        TextReader tr;
        tr = File.OpenText("actors.txt");

        while ((actor = tr.ReadLine()) != null)
        {
            ActorArrayList.Add(actor);
        }
        tr.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error loading file!");
    }
}

我現在需要創建一個方法,該方法讀取數組列表並將內容寫回到文本文件中,以替換文本文件中當前的內容。 此方法導致空白文本文件。 任何想法就是我想念/做錯了什么嗎?

private void WriteArrayList()
{
    TextWriter tw;

    try
    {
        tw = File.CreateText("actors.txt");
        foreach (object o in ActorArrayList)
            tw.WriteLine(o.ToString());
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error saving file!");
    }
}

注意:我知道人們似乎不喜歡數組列表或TextReader或TextWriter,但是我正在做的課程涵蓋了它們,因此我必須使用它們。

您需要沖洗或關閉編寫器:

private void WriteArrayList()
{
    TextWriter tw = null;

    try
    {
        tw = File.CreateText("actors.txt");
        foreach (object o in ActorArrayList)
            tw.WriteLine(o.ToString());
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error saving file!");
    }
    finally
    {
        if(tw != null)
            tw.Close();
    }
}

您可以使用linq Cast()在1個班輪中做到這一點:

File.WriteAllLines(@"actors.txt", ActorArrayList.Cast<string>());

另外,下面的邏輯應該解決

using (TextWriter writer = File.CreateText(@"actors.txt"))
{
    foreach (string actor in ActorArrayList)
    {
        writer.WriteLine(actor);
    }
}

您缺少對tw.Flush()的調用以及對tw.Close()的調用。 如果不調用這些內容,則內容實際上可能不會寫入磁盤,而只會保留在內存中。 同樣在這種情況下,您應該始終使用前面提到的using塊。

請參閱以下示例:

using (TextWriter tw = File.CreateText("actors.txt"))
{
   try
   {
      foreach (object o in ActorArrayList)
         tw.WriteLine(o.ToString());
      tw.Flush();
   }
   catch (Exception ex)
   {
      MessageBoxShow("Error saving file!");
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM