[英]StreamWriter not writing data
我正在使用StraemWriter将文本消息记录到日志文件中。 如果日志文件不存在,则应创建该日志文件;如果文件创建日期小于给定时间,则应附加该日志文件;如果在该时间之前创建,则应重新创建该日志文件。 我正在使用下面的类/代码
public static class LogIt
{
private const string LOG_FNAME = @"Logfile.log";
public static void WriteMsg(string msg)
{
bool append = true;
if (File.Exists(LOG_FNAME))
{
//DateTime delDate = DateTime.Now.AddDays(-1);
DateTime delDate = DateTime.Now.AddMinutes(-30);
DateTime fileCreatedDate = File.GetCreationTime(LOG_FNAME);
if (DateTime.Compare(fileCreatedDate, delDate) < 0)
{
Console.WriteLine("DELETE FILE");
File.Delete(LOG_FNAME);
}
}
using (StreamWriter sw = new StreamWriter(LOG_FNAME, append))
{
sw.WriteLine(msg);
}
Console.WriteLine(msg);
}
}
该类由Task Scheduler运行的简单控制台应用程序使用,每隔x分钟运行一次。
该消息编写如下:
LogIt.WriteMsg("Log this message");
该消息是在最初创建文件时记录的文件,但是当文件创建日期超过删除日期时,将重新创建该文件,但不会将任何后续消息写入该文件。
有什么想法吗?
由于某种原因,即使删除后重新创建文件,该文件仍具有初始创建日期(首次创建具有该路径的文件)作为创建日期。 您可以检查文件属性,并查看日志文件创建日期始终相同。 解决方法是,每当您重新创建文件时,都用代码更新文件创建日期。 您可以使用FileInfo类。
我猜您正在Windows 2003(或XP)上运行此代码。 如果是这样的话:在时间T1在某个目录中创建文件并将其删除然后重新创建时; 惊喜惊喜以T1为创建日期!
我知道这仅仅是因为我在Windows 2003上遇到了同样的问题!
顺便说一句,我现在使用NLog,并且(IMHO)它非常完美,并且拥有我需要的一切。
@MPD没问题。 这是我建议的解决方法的实现。 试试看,让我知道是否可行。
private const string LOG_FNAME = @"Logfile.log";
public static void WriteMsg(string msg)
{
bool deleted = false;
bool append = true;
if (File.Exists(LOG_FNAME))
{
//DateTime delDate = DateTime.Now.AddDays(-1);
DateTime delDate = DateTime.Now.AddMinutes(-30);
DateTime fileCreatedDate = File.GetCreationTime(LOG_FNAME);
if (DateTime.Compare(fileCreatedDate, delDate) < 0)
{
Console.WriteLine("DELETE FILE");
File.Delete(LOG_FNAME);
//record that file was deleted and a new one will be created
deleted = true;
}
}
using (StreamWriter sw = new StreamWriter(LOG_FNAME, append))
{
sw.WriteLine(msg);
}
if (deleted)
{
//a new file is created. Make sure the creation time is set
FileInfo fi = new FileInfo(LOG_FNAME);
fi.CreationTime = DateTime.Now;
}
Console.WriteLine(msg);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.