写入文件时出错

时间:2013-06-25 23:09:00

标签: c# asp.net file-locking

错误随机发生,我的猜测是当交通拥挤时,但我很难复制它。每次启动业务事务时都会运行此功能。

  

错误:System.IO.IOException:进程无法访问文件''   因为它正被另一个进程使用。在   System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)

private void writeToTrafficLogFile(string data, string filePath)
    {
        try
        {
            StreamWriter logWriter;

            if (!File.Exists(filePath))
            {
                logWriter = new StreamWriter(filePath);
            }
            else
            {
                logWriter = File.AppendText(filePath);
            }

            logWriter.WriteLine(DateTime.Now);
            logWriter.WriteLine(data);
            logWriter.WriteLine();

            logWriter.Close();

        }
        catch (Exception error) {
            sendLoggingErrorEmail(error, "Error Writing writeToTrafficLogFile", "Error Writing writeToTrafficLogFile.\r\n");
        }
    }

    #endregion
}

2 个答案:

答案 0 :(得分:3)

切换到现有的,经过良好测试的日志记录解决方案可能更容易,更灵活。有几个存在,看看dotnetlogging.com列出了数十个。我不能推荐任何,现在我被log4net卡住但我不推荐它。

答案 1 :(得分:0)

你可能同时从多个线程中调用它......

有两种可能的解决方案:

答:创建一个线程,从其他线程可以写入的字符串写入日志文件。 - 澄清编辑:有一个类似

的类
public static List<string> logme = new List<string>();
// Launch LogLoop as a thread!
public static void logloop()
{
     while (true)
     {
          while (logme.Count > 0)
          {
              File.AppendAllText("log.txt", logme[0] + "\r\n");
              logme.RemoveAt(0);
          }
          Thread.Sleep(500);
     }
}
// Oh, and whenever you want to log something, just do:
logme.add("Log this text!");

B:在日志编写器上使用Lock