안녕하세요. 자주 호출되는 로거 클래스가 있습니다. 가끔씩 반복적으로 호출되면 파일이 이미 열려있는 예외가 다른 응용 프로그램에서 사용 중일 때도 있습니다. 우리가이 문제를 해결할 수있는 유일한 방법은 예외를 잡아서 다시 열어 보는 것입니다. 어떻게 처리해야할지 잘 모르겠습니다. 이 로그 파일이기 때문에C# 파일 자주 열림, 이미 열려있는 예외
/// <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;
}
}
멀티 스레드 응용 프로그램이라고 생각합니까? AutoResetEvent를 사용하여 파일에 대한 액세스를 제어 할 수 있습니다. – itsme86