FileStream禁用Close()

时间:2013-11-20 13:41:49

标签: c# filestream

我正在使用DeleteOnClose选项创建一个临时文件:

var fileStream = File.Create(Path.GetTempFileName(), 4096, FileOptions.DeleteOnClose);

另一个类(我无法修改)会将一些数据写入此文件:

someObject.WriteDataToFile(fileStream);

然后我想检索数据以便进一步处理,关闭流,然后自动删除文件。

someObject.WriteDataToFile(fileStream)也会调用fileStream.Close(),这将删除该文件,因此我无法检索其内容。

问题:如何使fileStream中的代码无法关闭someObject.WriteDataToFile()

1 个答案:

答案 0 :(得分:2)

您可以使用装饰器模式来解决此问题

e.g;

public class UnclosableFileStream : StreamDecorator
{
    public UnclosableFileStream(Stream original) : base(original)
    {

    }

    public override void Close()
    {

    }

    public void RealClose()
    {
        base.Close();
    }
}

public abstract class StreamDecorator : Stream
{
     .... implements Stream base case
}

此示例使用自定义方法。您还可以考虑实现IDisposable接口并在Dispose()

上调用Close

希望这有帮助,