我正在使用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);
}
}
此类由任务计划程序运行的简单控制台应用程序使用,每隔x分钟运行一次。
消息编写如下:
LogIt.WriteMsg("Log this message");
最初创建文件时会记录消息,但是当文件创建日期超过删除日期时,将重新创建文件,但不会将后续消息写入文件。
关于为什么的任何想法?
答案 0 :(得分:1)
由于某种原因,文件具有初始创建日期(第一次创建具有该路径的文件)作为创建日期,即使在删除后重新创建它也是如此。您可以检查文件属性,并查看日志文件创建日期始终相同。解决方法是在重新创建文件时更新代码中的文件创建日期。您可以使用FileInfo类。
答案 1 :(得分:0)
我猜你在Windows 2003(或者XP)上运行这段代码。如果是这样:当你在T1时刻在某个目录中创建一个文件并删除它然后重新创建它;令人惊讶的是它有T1作为创作日期!
我知道这只是因为我在Windows 2003上遇到了同样的问题!
BTW我现在使用NLog和(恕我直言)这是完美的,并且拥有我需要的一切。
答案 2 :(得分:0)
@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);
}