首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileStream和BinaryReader的处理

FileStream和BinaryReader的处理
EN

Stack Overflow用户
提问于 2011-04-29 18:40:40
回答 3查看 2.9K关注 0票数 2

我有一个类来管理对二进制文件的访问。我想在第一次请求时打开这个文件,然后一直打开,直到我的类的实例被释放为止。我是这样执行的:

代码语言:javascript
复制
public class SomeService : IDisposable
{
    private BinaryReader _reader;

    public int ServiceFunction(...)
    {
        if (_reader == null)
            CreateReader();

        // Do something with _reader and return a result
    }

    private void CreateReader()
    {
        var stream = new FileStream("myFile", FileMode.Open, FileAccess.Read);
        _reader = new BinaryReader(stream);
    }

    public void Dispose()
    {
        if (_reader != null)
            _reader.Dispose();
    }
}

然后我会以这种方式使用这个类:

代码语言:javascript
复制
using (var service = new SomeService())
{
    foreach (var item in someList)
    {
        // other stuff
        if (eventuallyTrue)
        {
            int result = service.ServiceFunction(item.SomeProperty);
            // other stuff
        }
    }
}

问题:

  • 是否足以调用_reader.Dispose(),或者是否也有必要释放FileStream FileStream --我也需要释放FileStream,我是否可以像这样修改Dispose方法:

{ if (_reader != null) { if (_reader.BaseStream != null) _reader.BaseStream.Dispose();_reader.Dispose();//这里的处理顺序是否重要?}

  • 还是需要将FileStream保存在单独的类变量private FileStream _stream中,并在以后处理该流?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-29 18:47:16

处理_reader就足够了。

但这是因为读者的一个独特的“特征”,它假定了流的所有权。

因此,作为2种相关或不相关的可处置物的一般模式,它将无法做到。因此,我会将流存储为_stream,并最终将其处理掉,这样才能安全和一致。肯定不会疼的。

票数 5
EN

Stack Overflow用户

发布于 2011-04-29 21:30:22

BinaryReader.Dispose和StreamReader.Dispose的当前实现总是强制处理/关闭底层流。没有解决办法。

但是:

微软团队计划在下一个版本的.NET中修复这个问题。

http://connect.microsoft.com/VisualStudio/feedback/details/361389/allow-binaryreader-and-streamreader-to-wrap-a-stream-without-disposing-it

票数 3
EN

Stack Overflow用户

发布于 2011-04-29 18:42:40

配置读取器将自动释放底层流,因此不需要显式地进行处理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5836001

复制
相关文章

相似问题

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