【问题标题】:FileStream disable Close()FileStream 禁用 Close()
【发布时间】:2013-11-20 22:19:50
【问题描述】:

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

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

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

someObject.WriteDataToFile(fileStream);

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

但是someObject.WriteDataToFile(fileStream) 也调用fileStream.Close(),这会删除文件,所以我无法检索它的内容。

问题:如何防止fileStreamsomeObject.WriteDataToFile() 中的代码关闭?

【问题讨论】:

  • 为什么不在关闭后手动删除文件?
  • 你不能修改那个代码,所以不要用 DeleteOnClose 创建文件
  • 您可以在文件流周围编写一个装饰器,将“Close”实现为空方法,并在其 dispose 方法中执行 base.Close()。
  • 我创建了很多这样的文件,其中一些会变得非常大,所以我使用DeleteOnClose 来避免它们不被删除(以防出现错误或进程终止等情况) .)
  • @Marvin Smit:好主意,将其作为答案发布,以便我接受。

标签: c# filestream


【解决方案1】:

你可以使用装饰器模式来解决这个问题

例如;

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

希望这会有所帮助,

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2022-12-27
    相关资源
    最近更新 更多