使用.NET中的StreamWriter

本文关键字:StreamWriter 中的 NET 使用 | 更新日期: 2023-09-27 17:53:47

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

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

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

使用.NET中的StreamWriter

您可以使用StreamWriter构造函数(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

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

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

最好将StreamWriter封装在如上所述的using块中。

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/streamwriterhttp://social.msdn.microsoft.com/Forums/zh/clr/thread/17cd8ccf-7e53-41de-b4cc-221da70405a4

只需修改:

StreamWriter jp = new StreamWriter(jobsProcessed);

对此:

StreamWriter jp = new StreamWriter(jobsProcessed, true);
// 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);