モノラルでストリームを操作しているときに、本当に奇妙な問題が発生しています。私はこのようなストリームを開きます:
_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でエラーが発生したようです。再起動すると、毎回失敗します[/ edit]
これを回避してストリームを適切に閉じる方法は?