在使用一些现有库时,有些接口并没有继承IDisposable接口,因此无法直接调用Dispose释放对资源的占用,那么怎么办呢?

以Serilog为例,在早期版本中ILogger没有继承IDisposable,在创建一个logger后,会一直占用这个文件。

var logger = new LoggerConfiguration().WriteTo.File("file path").MinimumLevel.Information().CreateLogger();

如果对该文件进行额外的操作,是不允许的,那么就需要先临时释放对它的占用。

下面一行代码就可以解决

((IDisposable)logger).Dispose();

2019-03-25补充

使用FileStream读写文件时,可以以非独占式的方式打开。在实例化FileStream时,指定FileShare参数即可。

FileShare选项:

  • FileShare.None 谢绝共享当前文件
  • FileShare.Read 允许别的进程读取当前文件
  • FileShare.Write 允许别的进程写当前文件
  • FileShare.ReadWrite 允许别的程序读写当前文件