StreamWriter不写数据

时间:2013-05-16 21:38:53

标签: c# .net

我正在使用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");

最初创建文件时会记录消息,但是当文件创建日期超过删除日期时,将重新创建文件,但不会将后续消息写入文件。

关于为什么的任何想法?

3 个答案:

答案 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);
        }