簡體   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