首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何关闭与特定文件相关的所有FileStreams?

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

Stack Overflow用户
提问于 2010-11-04 03:41:55
回答 2查看 3.9K关注 0票数 1

我得到了一个文件流:

代码语言:javascript
复制
tempOutputStream = new FileStream(sTempFileName, FileMode.OpenOrCreate, 
    FileAccess.ReadWrite, FileShare.ReadWrite);

一旦创建了文件,您就可以创建额外的FileStreams来读/写tempOutputStream。有没有一种方法可以关闭所有不指向每个流obj的引用?或者至少对于创建流的第一个。

问题是,我想删除文件,但其中一个流没有关闭,所以我在File.Delete中得到了一个异常……

谢谢。

你好,列昂尼德

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-04 03:44:41

不,没有。

您需要修复您的代码,并确保当您使用完所有流时,它们将被关闭。

使用using语句。

票数 1
EN

Stack Overflow用户

发布于 2010-11-04 03:52:24

一种可能的解决方案是:

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

F217Dispose()>中创建每个流

这样,您就可以将您的功能隐藏在它应该在的地方,而不是在主代码行中。

另一种方法是防止硬重构:

我猜您的代码中有类似于

  • RegisterStreamChild(Stream Parent, Stream Child);
  • CloseAllChildSteams(Stream Parent)

的东西(我不知道流是如何duplicated...)

  • create a
  • 的,它将包含Map<Stream, list<Stream>>和几个方法:Stream s=originalStream.GetStream();

对于流复制的发生,

  • 使用singleton
  • search代码中包含的Map<>来实现这些方法。使用first方法为流关闭事件注册新的stream
  • search您的代码。使用第二种方法关闭所有子流
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4090977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档