StreamWriter不写数据
本文关键字:数据 StreamWriter | 更新日期: 2023-09-27 18:13:54
我使用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");
当文件最初创建时,消息被记录在文件中,但是当文件创建日期超过删除日期时,文件被重新创建,但没有后续消息被写入文件。
知道为什么吗?
由于某些原因,该文件具有初始创建日期(具有该路径的文件第一次被创建)作为创建日期,即使它在删除后被重新创建。您可以检查文件属性,看到日志文件的创建日期总是相同的。一种解决方法是,每当重新创建文件时,在代码中更新文件创建日期。你可以使用FileInfo类。
@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);
}
我猜你是在Windows 2003(或XP)上运行这段代码。如果是这样:当你在T1时刻在某个目录创建了一个文件,然后删除它,然后重新创建它;惊喜,惊喜,它的创建日期是T1 !
我知道这只是因为我在Windows 2003上有同样的问题!
顺便说一句,我现在使用NLog, (IMHO)它是完美的,有我需要的一切。