如何写入文本文件,直到应用程序关闭
我想写入文本文件,但我有一个小问题。当使用下面的代码时,它只写一次。如何写入文本文件,直到应用程序关闭
StreamWriter fileWriter = new StreamWriter("test.txt");
fileWriter.WriteLine(jointHead.Position.X);
fileWriter.Close();
当我写这样的:
Debug.WriteLine(jointHead.Position.X);
它,直到我关闭应用程序写入的X位置。我如何写入文本文件,如我在调试模式下写入,直到关闭应用程序。如果我从它所在的位置取fileWrite.Close(),程序就不起作用。
谢谢...
尝试
StreamWriter fileWriter = new StreamWriter("test.txt", true);
fileWriter.WriteLine(jointHead.Position.X);
fileWriter.Close();
这将允许写入附加到文件末尾文本。 目前你每次都从头开始写作。
编辑
如果要清除文件的应用程序的启动,然后只是执行以下操作:
StreamWriter fileWriter = new StreamWriter("test.txt");
fileWriter.Write("");
fileWriter.Close();
的StreamWriter的的该构造将删除test.txt的,如果它已经存在。所以每当这段代码被执行时,它将删除它之前创建的文件text.txt。相反,使用需要一个额外的布尔的overload for the constructor of streamwriter追加到现有的test.txt文件而不是替换它:
StreamWriter fileWriter = new StreamWriter("test.txt", true);
或者,你可以用File.AppendAllLines方法去追加文本的文件。那么你不必担心关闭文件句柄,方法名称本身就会清楚说明将会发生什么。对我来说,这会更方便,不像重载的Streamwriter构造函数那样晦涩难懂。
或者,您也可以使用日志框架,如NLog。在这种情况下,NLog将负责所有的文件操作,因此您无需担心。另外,你可以配置NLog来写任何你喜欢的东西,比如你的文件,或者如你所说的,调试输出窗口或者事件日志等等,你也可以在任何文件操作上下注比你自己的实现更有效率。
从你的描述我假设你给出的代码片段是在一个循环中。
通过在循环外部打开/关闭文件(这也可以解决您的问题),您可能会获得更好的性能。
我真的想每次都打开/关闭文件,然后指定append标志。
using (var fileWriter = new StreamWriter("test.txt", true))
{
fileWriter.WriteLine(jointHead.Position.X);
}
保持流写入器打开。但拨打WriteLine
后致电Flush
。
或者,您可以打开文件进行追加,而不是为每行重新创建文件。
您可能还想看看现有的日志记录框架。有许多现有的,不需要重新发明*。我个人会使用Common.Logging
与您选择的后端。
我宁愿建议你使用某种记录仪的使用一个stringbuilder。
public class Logger {
private StringBuilder sb;
public Logger() {
sb = new StringBuilder();
}
public Log(String log) {
sb.Append(log).AppendLine();
}
public void Flush() {
File.WriteAllText(String.Format(@"D:\Logs\Log at {0:yyyy-MM-dd HH:mm:ss}.txt", DateTime.Now), sb.ToString());
sb.Clear();
}
}
这个类是更优雅和可重用的解决方案。如果你的目标日志不是很大,这是真的可以接受的。
只需将相应的行更改为:StreamWriter fileWriter = new StreamWriter(“test.txt”,true);附加到文件。 – FooLman 2012-02-13 13:39:36
您的目标是追加文本,除非应用程序结束并将其写入磁盘? – Oybek 2012-02-13 13:40:03