and*_*ndy 1 c# file-io dispose locking .net-4.0
我正在使用FileStream和StreamReader类,如下所示:
using(FileStream stream = File.Open(filePath,FileMode.Open,FileAccess.Read,FileShare.ReadWrite))
{
using(var reader = new StreamReader(stream))
{
content = reader.ReadToEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着我正在处理它们.
然而,通过运行另一个应用程序,我发现有一些锁定保留我正在阅读的文件中的一些.
除了Dispose我应该调用Finalize还是Close?
干杯!
我有一个写入一些日志文件的服务.
上面的代码来自不同的WCF应用程序,它读取日志.
我还有一个自动部署项目,它停止主服务,备份文件,并添加新版本的服务,并再次启动它.
如果WCF服务正在运行(包含上面的代码),即使主服务已经停止(写入日志的服务),我在运行部署应用程序时也会遇到IO异常.
当WCF服务没有运行时,我没有IO异常,我可以安全地移动文件.
WCF所做的唯一IO就是......所以我假设它在某处保持某种锁定......?
不需要在流上调用close主要是因为读取器上的dispose方法无论如何都要明确地执行
快速浏览反射器中的代码就可以看出这一点
...
if ((this.Closable && disposing) && (this.stream != null))
{
this.stream.Close();
}
...
Run Code Online (Sandbox Code Playgroud)
因此,当在Reader上调用dispose(true)时,底层流被关闭,然后当使用块退出时,所有对象都准备好进行垃圾收集.
using语句足以释放资源,这就是IDisposable模式存在的原因:)