繁体   English   中英

StreamWriter不写入数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM