【问题标题】:using StreamWriter in .NET在 .NET 中使用 StreamWriter
【发布时间】:2013-01-17 11:20:08
【问题描述】:

我有一个控制台应用程序,它将已处理作业的详细信息写入 .txt 文件。我使用这段代码来做到这一点:

StreamWriter jp = new StreamWriter(jobsProcessed);
jp.WriteLine(DateTime.Now.ToString());
jp.WriteLine(info);
jp.WriteLine("------");
jp.Close();

不幸的是,每次处理作业时,新的“信息”字符串都会替换之前的字符串。有什么方法可以在文本文件的末尾或开头添加新文本?

【问题讨论】:

标签: c# .net io


【解决方案1】:

您可以使用StreamWriter Constructor (String, Boolean),其中第二个布尔参数表示数据是否必须附加到已经可用的数据。

并且还要避免调用Close 并使用using 语句

using(StreamWriter jp = new StreamWriter(jobsProcessed))
{
    jp.WriteLine(DateTime.Now.ToString());
    jp.WriteLine(info);
    jp.WriteLine("------");
   //jp.Close(); //NO NEED MORE
}

这样做的好处是,即使发生可能的异常,流也会是Disposed,顺便说一句。

【讨论】:

    【解决方案2】:

    StreamWriter 构造函数有一个重载,它接受一个名为 append 的第二个参数;

    using (StreamWriter jp = new StreamWriter(jobsProcessed, true))
    {
        jp.WriteLine(DateTime.Now.ToString());
        jp.WriteLine(info);
        jp.WriteLine("------");
    }
    

    最好将 StreamWriter 包装在上面的 using 块中。

    【讨论】:

      【解决方案3】:
      StreamWriter jp = new StreamWriter(jobsProcessed,true);
      

      第二个参数

      //Determines whether data is to be appended to the file. If the file exists
      //and append is false, the file is overwritten. If the file exists and append
      // is true, the data is appended to the file. Otherwise, a new file is created.
      

      http://www.dotnetperls.com/streamwriter http://social.msdn.microsoft.com/Forums/zh/clr/thread/17cd8ccf-7e53-41de-b4cc-221da70405a4

      【讨论】:

      • 你应该解释一下代码。仅代码答案并不总是对 OP 有帮助。
      【解决方案4】:

      修改一下:

      StreamWriter jp = new StreamWriter(jobsProcessed);
      

      到这里:

      StreamWriter jp = new StreamWriter(jobsProcessed, true);
      

      【讨论】:

        【解决方案5】:
        // using (StreamWriter jp = new StreamWriter(jobsProcessed)) Overwrites, not good for you!
        using (StreamWriter jp = new StreamWriter(jobsProcessed, true)) // Appends, good for you!
        {
            jp.WriteLine(DateTime.Now.ToString());
            jp.WriteLine(info);
            jp.WriteLine("------");
        }
        

        但是你可以像这样简化你的代码:

        String[] content = File.ReadAllLines(jobsProcessed);
        
        String[] newContent = new String[3];
        newContent[0] = DateTime.Now.ToString();
        newContent[1] = info;  
        newContent[2] = "------";
        
        File.AppendAllLines(jobsProcessed, newContent);
        

        【讨论】:

          猜你喜欢
          • 2011-10-29
          • 2014-07-27
          • 2012-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-29
          • 2020-10-27
          • 2017-04-03
          相关资源
          最近更新 更多