Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件中的文本未追加-C#_C#_Logging_.net_Streamwriter - Fatal编程技术网

文件中的文本未追加-C#

文件中的文本未追加-C#,c#,logging,.net,streamwriter,C#,Logging,.net,Streamwriter,我决定在我的应用程序中添加一个日志机制,以便捕获抛出的任何错误或异常。我注意到,当创建日志条目时,它不会添加到日志中,它似乎覆盖了文件中的所有内容,因此只有一个条目 我有一种感觉,这是我遗漏的一些简单的东西,但我并不经常使用System.IO名称空间 创建/检查日志文件: public static void SetWorkingDirectory(string path) { _workingDirectory = path + "\\ErrorLog.

我决定在我的应用程序中添加一个日志机制,以便捕获抛出的任何错误或异常。我注意到,当创建日志条目时,它不会添加到日志中,它似乎覆盖了文件中的所有内容,因此只有一个条目

我有一种感觉,这是我遗漏的一些简单的东西,但我并不经常使用System.IO名称空间

创建/检查日志文件:

public static void SetWorkingDirectory(string path)
        {
            _workingDirectory = path + "\\ErrorLog.txt";

            if(!File.Exists(_workingDirectory))
            {
                File.Create(_workingDirectory);
            }
            pathSet = true;
        }
public static bool Add(string message)
        {
            StringBuilder str = new StringBuilder();
            str.Append(System.DateTime.Now);
            str.Append(" ");
            str.Append(message);
            str.Append(" \n");

            using (StreamWriter writer = new StreamWriter(_workingDirectory))
            {
                writer.Write(str.ToString());
            }
            return true;
        }
添加到日志中:

public static void SetWorkingDirectory(string path)
        {
            _workingDirectory = path + "\\ErrorLog.txt";

            if(!File.Exists(_workingDirectory))
            {
                File.Create(_workingDirectory);
            }
            pathSet = true;
        }
public static bool Add(string message)
        {
            StringBuilder str = new StringBuilder();
            str.Append(System.DateTime.Now);
            str.Append(" ");
            str.Append(message);
            str.Append(" \n");

            using (StreamWriter writer = new StreamWriter(_workingDirectory))
            {
                writer.Write(str.ToString());
            }
            return true;
        }
日志本身:

public static void SetWorkingDirectory(string path)
        {
            _workingDirectory = path + "\\ErrorLog.txt";

            if(!File.Exists(_workingDirectory))
            {
                File.Create(_workingDirectory);
            }
            pathSet = true;
        }
public static bool Add(string message)
        {
            StringBuilder str = new StringBuilder();
            str.Append(System.DateTime.Now);
            str.Append(" ");
            str.Append(message);
            str.Append(" \n");

            using (StreamWriter writer = new StreamWriter(_workingDirectory))
            {
                writer.Write(str.ToString());
            }
            return true;
        }

尝试使用构造函数并为第二个参数传递true,以便它以追加模式打开文件

...
using(writer = new StreamWriter(_workingDirectory, true))
...

只需使用StreamWriter的重载,该重载接受bool来确定是否应该追加

using (var writer = new StreamWriter(_workingDirectory, true)
{
    ...
}

您正在使用的
StreamWriter
构造函数将覆盖该文件。有一个重载将附加:

 using (StreamWriter writer = new StreamWriter(_workingDirectory, true))


此外,除非这是为了学习,否则请使用许多可用的日志框架中的一个。日志记录可能很难正确进行。

以前解决这个问题已经花了很多编程时间。我建议改用log4net之类的日志包,以节省调试代码的时间。调试代码的目的是让您插入正在编写的代码。

正如driis上面所述,在执行日志记录时,最好使用一个现成的日志框架,因为不需要付出极大的努力,他们就能比你做得更高效、更干净。在.NET中,我最喜欢使用预打包的跟踪实用程序,它允许您在应用程序配置中声明一个或多个tracelistener,然后简单地在代码中写入它们,如下所示:

Trace.Write("Test output ");

或者,您可以使用该框架。

哈哈,这是我最不想检查的东西=/我假设有一个“\n”会导致它写入一个新行,但我想这只是用于控制台。谢谢你的假设部分正确。问题是每次打开文件时,你只写了一行,每次打开文件时,你都覆盖了旧文件,而不是附加到它的末尾。这是正确的观点,但它并不是这个问题的真正答案,换个说法怎么样?我的回答可能更像是对未来编程考虑的战略性回答,而不是“解决眼前的问题”的回答。谢谢Sean,我会研究一下:)