如何关闭所有与特定文件相关的FileStream?

时间:2010-11-03 19:41:55

标签: c# filestream

我收到了一个文件流:

tempOutputStream = new FileStream(sTempFileName, FileMode.OpenOrCreate, 
    FileAccess.ReadWrite, FileShare.ReadWrite);

创建文件后,您可以创建其他FileStream来读/写tempOutputStream。 有没有办法关闭所有这些没有参考每个流obj?或者至少是创建流的第一个。

问题是我想要删除该文件,但其中一个流未关闭,所以我在File.Delete中得到了一个例外......

谢谢。

此致 列昂尼德

2 个答案:

答案 0 :(得分:1)

不,没有。

您需要修复代码并确保在使用完毕后关闭所有流 使用using声明。

答案 1 :(得分:1)

一种可能的解决方案:

  • 扩展FileStream类,或创建Stream派生
  • 其中,添加类似GetNewStream()
  • 的方法
  • 该方法可以返回新流,并将其引用写入某个内部List<Stream>
  • 覆盖Close()Close()列表中的每个流
  • 覆盖Dispose()Dispose()列表中的每个流

这样你就可以隐藏你的功能,远离你的主要代码。

另一个,防止硬重构:

  • 我的猜测是你的代码中有Stream s=originalStream.GetStream();之类的东西(我不清楚流是如何复制的......)
  • 创建一个包含Map<Stream, list<Stream>>的单例和几个方法:
    • RegisterStreamChild(Stream Parent, Stream Child);
    • CloseAllChildSteams(Stream Parent)
  • 使用Map&lt;&gt;实现这些方法包含在单身人士中
  • 在代码中搜索流重复的出现次数。使用第一种方法注册新流
  • 在代码中搜索流关闭的出现次数。使用第二种方法关闭所有子流