Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将arraylist写入文本文件C#_C#_Arraylist - Fatal编程技术网

将arraylist写入文本文件C#

将arraylist写入文本文件C#,c#,arraylist,C#,Arraylist,我有一个读取文本文件并将内容写入数组列表的方法。数组列表是全局声明的,没有元素。这种方法非常有效 private void LoadArrayList() { try { string actor; TextReader tr; tr = File.OpenText("actors.txt"); while ((actor = tr.ReadLine()) != null) {

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

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

您需要刷新或关闭您的writer:

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行程序中实现这一点:


您缺少对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!");
   }
}

使用
ArrayList
的任何特定原因,通常仅出于向后兼容性考虑,通常最好使用
List
,在本例中是
List
。在处理实现
IDisposable
的类时,需要使用
using
块。如果您有支持它的Visual Studio,请启用静态代码分析,以便在忘记它时收到警告在你的方法末尾。@Ben Robinson我正在使用ArrayList,因为这是我的课程要求我做的。我不确定下一步是否继续使用列表。@nvoigt我会打开它,谢谢。我没有意识到这一点。应该是一个评论,而不是一个答案。现在这是一个答案!:)我使用finally块添加了一个Close,它给了我一个错误“使用未分配的局部变量‘tw’”。但是如果我将它直接放在tw.WriteLine(o.ToString())之后;很好。@mrkd1991:我编辑了答案来解决这个问题。祝你好运;)
using (TextWriter writer = File.CreateText(@"actors.txt"))
{
    foreach (string actor in ActorArrayList)
    {
        writer.WriteLine(actor);
    }
}
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!");
   }
}