在使用单声道流时,我遇到了一个非常奇怪的问题。我打开这样的流:
_stream = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
其中 _stream 当然是 FileStream。我为这个类添加了一个 dispose 方法,如下所示:
public override void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if(!_disposed)
{
if(disposing)
{
_stream.Flush(true);
_stream.Dispose();
_items.Clear();
}
_disposed = true;
}
}
现在我有这个简单的测试:
[Test]
public void SimpleTest()
{
SyncFileWriter s = new SyncFileWriter("file");
s.Save("a", "b");
s.Dispose();
SyncFileWriter s2 = new SyncFileWriter("file");
s2.Dispose();
}
但如果因 IOException 失败:共享冲突。[编辑]看来monodevelop有错误。重新启动它,现在它每次都失败[/编辑]
如何避免这种情况并正确关闭流?