微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

StreamWriter在新的一天不会更新其路径

如何解决StreamWriter在新的一天不会更新其路径

| 我有一个程序正在写入名为\“ appname_yyyyMMdd.log \”的日志文件,其中appname是我的应用程序的名称,而yyyyMMdd是当前日期;样本日志文件名称可能是\“ loglistener_20110615.log \”。无论如何,我的应用程序会很好地创建日志文件,并按计划对其进行更新。但是,日期更改后,该应用程序将不会记录任何内容,也不会创建新文件。换句话说,由于今天是6/15,所以我需要它在今晚午夜之后创建一个名为\“ loglistener_20110616.log \”的文件,并且我需要它继续记录到该新文件。 以下是代码摘录:
public static void LogInfo(string format,params object[] args)
{
    lock (_logLock)
    {
        using (StreamWriter sw = File.AppendText(GetLogPath()))
        {
            sw.WriteLine(GetTimeStamp() + String.Format(format,args));
        }
    }
}

private static string GetLogPath()
{
    string appName = \"loglistener\";
    string today = DateTime.Today.ToString(\"yyyyMMdd\");
    string fileName = appName + \"_\" + today + \".log\";
    string fullLogPath = AppDomain.CurrentDomain.BaseDirectory + fileName;

    return fullLogPath;
}
我检查了这个类似的问题,但是那个问题描述了一个不同的情况(具有不适用的修复程序)。 更新-以防万一Google员工登陆此页面,后来我发现了一个与此完全不同的原因。我的日志正在记录来自电子邮件监听服务的信息。该服务本身存在一个问题,即半小时后超时。因此,我的问题不是w / CreateText / AppendText ...我的问题是没有什么可记录的。很烦人,但我希望其他人不会被这个问题/答案所误导。     

解决方法

        您应该检查以确保该文件首先存在。 摘自
File.AppendText
文档   类型:System.IO.StreamWriter A   附加UTF-8的StreamWriter   编码文本到现有文件。
public static void LogInfo(string format,params object[] args)
{
    lock (_logLock)
    {
        using (StreamWriter sw = File.Exists(GetLogPath) ? File.AppendText(GetLogPath()) : File.CreateText(GetLogPath())
        {
            sw.WriteLine(GetTimeStamp() + String.Format(format,args));
        }
    }

}
试试看 在查看注释并重新阅读文档之后。
File.AppendText
无论文件是否存在,都应始终工作。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。