如何解决“进程无法访问文件,因为它正被另一个进程使用”错误 [英] How to solve "Process cannot access a file because it is being used by another process" error

查看:176
本文介绍了如何解决“进程无法访问文件,因为它正被另一个进程使用”错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我正在尝试使用下面给出的代码创建一个日志文件,但它会抛出进程无法访问文件,因为它正被使用另一个过程错误。代码如下: -



Hi,

I am trying to create a log file using the code given below, but it throws "Process cannot access a file because it is being used by another process" error. The code is as follows: -

private static void CreateLogFile(int TaskId = 0, string TaskName = "", string ServiceName = "", Exception EX = null)
      {
          string logFile = System.IO.Directory.GetCurrentDirectory() + "\\LogFile\\" + DateTime.Now.ToString("dd-MM-yyyy") + "TaskLogFile.txt";
          string logMessage = string.Empty;
          StreamWriter LogWriter;
          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("-----------------------------------------------------------------------------------------------------");
                  LogWriter.Close();
              }

              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}, Error Location : {1},Task ID = {2}, Task Name : {3}, Service Name : {4} " + ex.ToString(), Environment.StackTrace, TaskId, TaskName, ServiceName);

          }

      }





另外,我用其他方法调用此方法异步方法。请帮助我解决这个问题。



谢谢



Also, I am calling this method with other async methods. Kindly help me out in this regard.

Thanks

推荐答案

你并不总是关闭你的流 - 如果你只打开一次,那么它将保持打开状态并一直使用,直到垃圾收集器将其作为未使用的处置。



最好避免的方法这是使用 finally 块:

You don't always close your stream - and if you leave it open just one time, then it will remain open and in use until the garbage collector Disposes of it as unused.

The best way to avoid this is to use a finally block:
private static void CreateLogFile(int TaskId = 0, string TaskName = "", string ServiceName = "", Exception EX = null)
    {
    string logFile = System.IO.Directory.GetCurrentDirectory() + "\\LogFile\\" + DateTime.Now.ToString("dd-MM-yyyy") + "TaskLogFile.txt";
    string logMessage = string.Empty;
    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}, Error Location : {1},Task ID = {2}, Task Name : {3}, Service Name : {4} " + ex.ToString(), Environment.StackTrace, TaskId, TaskName, ServiceName);
        }
    finally
        {
        if (LogWriter != null) LogWriter.Close();
        }
    }

以便在退出方法之前始终关闭编写器。

so that the writer is always closed before you exit the method.


这篇关于如何解决“进程无法访问文件,因为它正被另一个进程使用”错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆