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