【发布时间】:2015-06-15 06:26:15
【问题描述】:
我正在尝试使用下面给出的代码创建一个日志文件,但它引发了以下错误:-
进程无法访问该文件,因为它正在被另一个人使用 进程
请在这方面帮助我。
代码如下:-
string logFile = System.IO.Directory.GetCurrentDirectory() + "\\LogFile\\" + DateTime.Now.ToString("dd-MM-yyyy") + "TaskLogFile.txt";
StreamWriter LogWriter = null;
try
{
if (!File.Exists(logFile))
{
LogWriter = new StreamWriter(logFile);
Console.WriteLine("Log File Created...");
}
else
{
LogWriter = File.AppendText(logFile);
Console.WriteLine("Log File Appended...");
}
if (EX == null)
{
LogWriter.Write("\r\nLog Entry : ");
LogWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
LogWriter.WriteLine("\nTask Id = {0} , Task Name = {1}, Service Name = {2} ", TaskId, TaskName, ServiceName);
LogWriter.WriteLine("-----------------------------------------------------------------------------------------------------");
}
else
{
LogWriter.WriteLine("\n Error : {0}, Error Location : {1},Task ID = {2}, Task Name : {3}, Service Name : {4} " + EX.ToString(), EX.StackTrace, TaskId, TaskName, ServiceName);
}
}
catch (Exception ex)
{
LogWriter = File.AppendText(logFile);
LogWriter.WriteLine("\n Error : {0}" + ex.ToString());
}
finally
{
if (LogWriter != null)
{
LogWriter.Close();
}
LogWriter = null;
}
【问题讨论】:
-
文件操作期间的异常不会关闭文件句柄 - 您的
catch子句正在尝试打开已经打开的文件(用于写入,禁用共享)。更不用说catch的范围如此广泛,它可能会在最初打开文件时或在执行WriteLine等时捕获错误。哦,别忘了其他人可能会将文件打开为好吧:) -
一旦你确定你自己已经修复了你的代码,你可以使用SysInternals Process Explorer来确定是否有其他东西锁定它。
-
@Luaan 我试图忽略异常,但错误仍然存在。
-
如果您在多个线程上使用该函数,您可能希望等待文件可访问,例如 stackoverflow.com/questions/12268067/… 如果您不需要自己实现日志记录,则可以使用日志框架,如log4net
-
您可能应该使用像 log4net 这样的日志库,而不是尝试自己编写。文件管理和多线程访问只是您需要解决的两个问题。此外,.NET 已经提供了日志记录支持,确实解决了这些问题
标签: c#