[英]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.