繁体   English   中英

C#文件经常打开,已经打开异常

[英]C# File Open frequently, already open exception

嘿,所以我有一个记录器类,它经常被调用,有时当它被快速重复调用时,将抛出一个异常,即该文件已被其他应用程序使用。 我们找到解决此问题的唯一方法是捕获异常,然后尝试再次将其打开...我不确定如何正确处理该异常。

    /// <summary>
    /// Open a log file based on a date
    /// </summary>
    /// <param name="date"> Date of the file to open </param>
    public static void OpenLogFile(DateTime date)
    {
        while (true)
        {
            try
            {
                logStream = File.Open("Logs/ems." + date.ToString("yyyy-MM-dd") + ".log", FileMode.Append);
                break;
            }
            catch
            {
                continue;
            }
        }
    }




    /// <summary>
    /// Writes to a log file the specified input
    /// </summary>
    /// <param name="input"> Content to write to the log file </param>
    public static void Log(string className, string methodName, string input)
    {
            OpenLogFile(DateTime.Now);

            using (StreamWriter s = new StreamWriter(logStream))
            {
                s.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + '[' + className + '.' + methodName + "] " + input);
            }

            CloseLogFile(); 
    }




    /// <summary>
    /// Closes the current log file
    /// </summary>
    public static void CloseLogFile()
    {
        if (logStream != null)
        {
            logStream.Close();
            logStream = null;
        }
    }

由于这是一个日志文件,因此我认为显而易见的(且正确的)解决方案是在程序执行期间将文件保持打开状态。

如果您不想使用像Apache的log4net这样已经实现的第三方记录器,则可以编写自己的小记录器类,该类使用线程安全机制将行写入文件。

它可能是static类或单例。 通常,在程序开始和结束时执行是可以预见的,因此应该清楚在哪里初始化以及关闭对象/类。

需要一点顺序,而不是全部免费的磁盘。 将日志消息存储在队列中,并具有单个线程出队和写入项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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