2013-11-20 31 views
0

我创建一个临时文件与DeleteOnClose选项:的FileStream禁用关闭()

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

另一类(我不能修改)将一些数据写入该文件:

someObject.WriteDataToFile(fileStream); 

那么我想检索数据以进行进一步处理,关闭流并让文件自动删除。

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

问题:如何保持fileStream不被代码关闭someObject.WriteDataToFile()

+5

为什么不手动删除文件后关闭? –

+3

您不能修改该代码,因此不要使用DeleteOnClose创建该文件 –

+3

您可以在实现'Close'的文件流中编写一个装饰器作为空方法,并执行base.Close()处理方法。 –

回答

2

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

例如;

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()方法

希望这有助于