将arraylist写入文本文件C#

时间:2014-10-16 10:14:58

标签: c# arraylist

我有一个读取文本文件并将内容写入数组列表的方法。数组列表是全局声明的,没有元素。这种方法非常有效。

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,但我所做的课程涵盖了它们,因此我需要使用它们。

3 个答案:

答案 0 :(得分:2)

你需要刷新或关闭你的作家:

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

答案 1 :(得分:2)

您可以使用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);
    }
}

答案 2 :(得分:0)

您缺少对tw.Flush()的调用以及对tw.Close()的调用。如果不调用这些内容,内容可能实际上不会写入磁盘,而只会在内存中保留。 同样在这种情况下,您应该使用前面提到的使用块。

见这个例子:

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!");
   }
}