2015-06-15 36 views
2

我正在尝试使用下面给出的代码创建一个日志文件,但它引发了以下错误: -如何解决错误“进程无法访问该文件,因为它正在被另一个进程使用”

The Process Cannot access the file because it is being used by another process

请在这方面帮助我。

的代码,如下所示: -

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; 
} 
+6

文件操作期间的异常不会关闭文件句柄 - 您的catch语句尝试打开已打开的文件(用于书写,禁用共享)。更不用说那个'catch'的范围如此宽泛,它可能会在最初打开文件时,或者在执行WriteLine等时发生错误。噢,别忘了其他人可能会将该文件打开为以及:) – Luaan

+1

一旦你确定你自己修复了你的代码,你可以使用[SysInternals Process Explorer](https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)来解决别的东西在锁定它。 – Reddog

+0

@Luaan我试图忽略异常,但错误仍然存​​在。 – Harsh

回答

1

更新你钓到的鱼(){}这个和try块;

catch (Exception ex) 
    { 

     if (LogWriter != null) 
     { 
      LogWriter.Close();  
     } 
     LogWriter = File.AppendText(logFile); 
     LogWriter.WriteLine("\n Error : {0}" + ex.ToString()); 
    } 

希望它有助于..!

0

我建议使用File.AppendAllText()方法,因为它是最简单的解决方案,为此目的很好。此方法完全符合您的记录器应该执行的操作 - 它会打开一个文件,并附加一行文本(或多行文本行)并立即关闭它。

为什么要使用filestream?

相关问题