C# 如何在应用程序关闭之前写入文本文件
我想写一个文本文件,但我有一个小问题。当使用下面的代码时,它只写一次C# 如何在应用程序关闭之前写入文本文件,c#,save,text-files,C#,Save,Text Files,我想写一个文本文件,但我有一个小问题。当使用下面的代码时,它只写一次 StreamWriter fileWriter = new StreamWriter("test.txt"); fileWriter.WriteLine(jointHead.Position.X); fileWriter.Close(); 当我这样写的时候: Debug.WriteLine(jointHead.Position.X); 它写入X位
StreamWriter fileWriter = new StreamWriter("test.txt");
fileWriter.WriteLine(jointHead.Position.X);
fileWriter.Close();
当我这样写的时候:
Debug.WriteLine(jointHead.Position.X);
它写入X位置,直到我关闭应用程序。在关闭应用程序之前,如何像在调试模式下写入一样写入文本文件。如果我从它所在的位置获取fileWrite.Close(),程序将无法运行
谢谢…streamwriter的构造函数将删除test.txt(如果它已经存在)。因此,每次执行这段代码时,它都会删除先前创建的text.txt文件。相反,请使用需要附加bool以附加到现有test.txt文件的,而不是替换它的:
StreamWriter fileWriter = new StreamWriter("test.txt", true);
或者,您可以使用该方法将文本附加到文件中。这样,您就不必担心关闭文件句柄,方法名称本身就清楚地说明了将要发生什么。对我来说,这将更方便,并且不像重载的streamwriter构造函数那样晦涩
或者,您也可以使用类似的日志框架。在这种情况下,NLog将负责您的所有文件操作,这样您就不用担心了。此外,您可以将NLog配置为写入任何您喜欢的内容,例如您的文件,或者如您所提到的,调试输出窗口,或者事件日志等等,您可以打赌,任何文件操作都可能比您自己的实现更高效。根据您的描述,我假设您给出的代码片段是循环的 通过将文件打开/关闭移动到循环之外,您可能会获得更好的性能(这也将解决您的问题) 如果您确实希望每次都打开/关闭文件,然后指定append标志
using (var fileWriter = new StreamWriter("test.txt", true))
{
fileWriter.WriteLine(jointHead.Position.X);
}
保持流编写器打开。但是在
WriteLine
调用之后调用Flush
或者,您可以打开文件进行追加,而不是为每行重新创建文件
您可能还希望查看现有的日志框架。现有的有很多,不需要重新发明轮子。就我个人而言,我会使用
Common.Logging
和您选择的后端。试试看
StreamWriter fileWriter = new StreamWriter("test.txt", true);
fileWriter.WriteLine(jointHead.Position.X);
fileWriter.Close();
这将允许将写入的文本追加到文件末尾。
此时此刻,你的每一次写作都是从头开始的
编辑
如果希望在应用程序开始时清除该文件,则只需执行以下操作:
StreamWriter fileWriter = new StreamWriter("test.txt");
fileWriter.Write("");
fileWriter.Close();
我建议您使用某种带有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=newstreamwriter(“test.txt”,true);附加到文件。您的目标是附加文本,除非应用程序结束并将其写入磁盘?谢谢,这很有效,但不会过度写入。是否有任何方法可以在每次启动应用程序时覆盖该文件。?添加了如何清除该文件-基本上用空字符覆盖该文件并保存它。我不明白。我会同时使用两者吗?我的意思是,编辑verison将在应用程序的开始,我不保存任何东西。代码的第一部分将在我要保存的地方?