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将在应用程序的开始,我不保存任何东西。代码的第一部分将在我要保存的地方?