Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StreamWriter未在新的一天更新其路径_C#_Logging_Streamwriter - Fatal编程技术网

C# StreamWriter未在新的一天更新其路径

C# StreamWriter未在新的一天更新其路径,c#,logging,streamwriter,C#,Logging,Streamwriter,我有一个程序正在写入名为“appname_yyyyMMdd.log”的日志文件,其中appname是我的应用程序的名称,yyyyMMdd是当前日期;示例日志文件名可能是“loglistener_20110615.log”。无论如何,我的应用程序创建的日志文件很好,并按计划进行更新。但是,一旦日期更改,应用程序不会记录任何内容,也不会创建新文件。换句话说,由于今天是6月15日,我需要它在今晚午夜后创建一个名为“loglistener_20110616.log”的文件,并且我需要它继续记录到新文件

我有一个程序正在写入名为“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;
}
我检查了这个问题,但这个问题描述了一个不同的场景(使用不适用的修复)


更新-为了以防万一谷歌登陆这个页面,我后来发现了一个完全不同的原因。我的日志记录来自电子邮件监听服务的信息。服务本身有一个问题,半小时后超时。所以,我的问题不是w/CreateText/AppendText。。。我的问题是没有什么可记录的。非常烦人,但我希望其他人不会被这个问题/答案误导。

您应该先检查文件是否存在

文件.AppendText
文档

类型:System.IO.StreamWriter A 附加UTF-8的StreamWriter 已编码文本到现有文件

试试看

查看评论并重新阅读文档后

File.AppendText

无论文件是否存在,都应始终有效

您应该首先检查以确保文件存在

文件.AppendText
文档

类型:System.IO.StreamWriter A 附加UTF-8的StreamWriter 已编码文本到现有文件

试试看

查看评论并重新阅读文档后

File.AppendText


无论文件是否存在,都应始终有效

我之前也做过类似的事情,但是Create让流保持打开状态,当我立即尝试写入时,它正在创建错误。我可以试一试…@WEFX使用块应该关闭并为您处理streamwriter。我认为它不存在文件。从“如果路径指定的文件不存在,则创建它。”我认为@Tuzo是正确的-但是,前面提到的Microsoft示例使用If-else语句,如果文件不存在,则调用CreateText,而不是AppendText,因此@msarchet可能位于某个位置…我之前也做过类似的操作,但是Create使流保持打开状态,当我立即尝试写入时,它正在创建错误。我可以试一试…@WEFX使用块应该关闭并为您处理streamwriter。我认为它不存在文件。从“如果路径指定的文件不存在,它就被创建了。”我认为@Tuzo是正确的-但是,前面提到的Microsoft示例使用了If-else语句,如果文件不存在,则调用CreateText,而不是AppendText,因此@msarchet可能在某个地方…我假设您没有任何异常(例如权限)。更改日期后,消息是转到“旧”(前一天的文件)还是只是“丢失”?我已经用@msarchet的答案解决了这个问题,但要回答您的问题,没有例外,消息只是“丢失”。它们没有出现在前一天的日志中。同样,现在已修复。感谢您的帮助。您可能需要使用File.AppendAllText(…)如果您只是执行一次写入操作。如果文件不存在,它将创建该文件,然后写入并关闭该文件。请注意,鉴于上面的代码和问题的描述,我无法再现您的行为。因此,这里似乎还有一些其他因素在起作用(环境、配置和其他一些代码)。我假设您没有收到任何异常(例如权限)。在日期更改后,消息是转到“旧”(前一天的文件)还是只是“丢失”?我已使用@msarchet的答案修复了它,但为了回答您的问题,没有异常,消息只是“丢失”。它们没有出现在前一天的日志中。同样,现在已修复。感谢您的帮助。您可能需要使用File.AppendAllText(…)如果您只是执行一次写入操作。如果文件不存在,它将创建该文件,然后写入并关闭该文件。请注意,鉴于上面的代码和问题的描述,我无法重现您的行为。因此,这里似乎还有其他东西在起作用(环境、配置和其他一些代码)。