预先创建的流和“使用”块

时间:2012-03-08 04:56:25

标签: c# stream clone

当“使用”块篡改我预先创建的对象时,我真的很生气。我有这段代码

class Asset {
    public Stream FileStream { get; set; }

    public Asset(string fileName) {
        FileStream = ...open a file stream...;
    }
}

// Somewhere else
Asset asset = new Asset("file.txt");
using (var reader = new StreamReader(asset.FileStream)) {
    //blah blah blah
}

// Somewhere else else
using (var reader2 = new StreamReader(asset.FileStream))

=>抛出这个例外:

  

System.ArgumentException:Stream无法读取。

Visual Studio中的逐步调试帮助我知道asset.FileStream已在第一个“using”块之后处理。

请帮我救命:(( 如何从流中创建克隆流?

1 个答案:

答案 0 :(得分:2)

我同意读者关闭基础流的事实是愚蠢的。 this article中概述的方法是创建一个包装Stream的装饰器类,并且对CloseDispose方法没有操作。但是,这可能不值得花费,所以你应该考虑不要为这些读者使用using