【问题标题】:Process cannot access the file "MyFile.log" because it is being used by another process进程无法访问文件“MyFile.log”,因为它正被另一个进程使用
【发布时间】:2017-05-10 16:44:45
【问题描述】:

我得到了

该进程无法访问文件“MyFile.log”,因为它正被另一个进程使用。

当我这样做时

File.SetAttributes(filename,FileAttributes.Normal)

using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
    // Do stuff with log4net log
}

我已经阅读了其他帖子,但它们都暗示了我已经在做的事情。还有其他建议吗?

谢谢。

【问题讨论】:

  • 也许 Visual Studio 正在锁定文件。尝试重新启动它。

标签: c# .net log4net


【解决方案1】:

尝试使用最小锁配置 log4net:

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    ...
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
   ...
</appender>

have a look here for better explanation.

或者,尝试使用以下命令打开日志文件:

     using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite))
    {...
}

或查看此项目:Tailf 在任何情况下,删除无法工作的 SetAttributes() 部分。 Tailf 项目描述 Tailf 是可用于 unix/linux 系统的 tail -f 命令的 C# 实现。与其他端口不同,它不会以任何方式锁定文件,因此即使其他重命名文件也可以工作:这是专门设计用于与 log4net 滚动文件附加程序一起使用。

【讨论】:

  • 无法配置/触摸配置到位。更多的想法。关于阅读您的链接
  • @user231465 检查改进后的回复
  • 现在无法在工作中下载,但您能以某种方式读取文件吗?正在考虑制作文件的副本。我想知道商业日志阅读器如何处理锁定嗯......
  • FileShare.Delete 起作用了。FileShare.Delete 的含义是什么?
  • FileShare.Read 可能是解决您问题的方法。 FileShare.Delete 允许 log4net 在“滚动”文件名时重命名文件。
猜你喜欢
  • 1970-01-01
  • 2011-07-05
  • 2015-12-07
  • 2011-04-17
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多