在使用一些现有库时,有些接口并没有继承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 允许别的程序读写当前文件