【问题标题】:Is it possible to restrict/require certain capabilities in a Stream parameter?是否可以在 Stream 参数中限制/要求某些功能?
【发布时间】:2011-03-17 05:40:24
【问题描述】:

我正在编写一个创建文件目录的应用程序。目前,目录信息存储在 XML 文件中,但我正在尝试将接口抽象为目录以允许其他未来的存储机制,例如单个 ZIP 文件、SQL 服务器或 HTTP 服务器。因此,抽象目录类不是返回文件路径,而是将文件作为字节流返回。因此允许文件的来源是磁盘,但也允许来自数据库或 Web 服务器的文件。见我之前的related question

但是,根 Stream 类包括具有不同功能的流。有些流只能读取,有些流只能写入。仍然有一些流支持搜索,而其他流不支持。

是否有通过属性或方法限制流返回的能力?例如,我的 Catalog 类看起来像这样。

public abstract class Catalog
{
    ...
    public abstract Stream File
    {
        get;
    }
    ...
}

有没有办法确保File 总是返回一个支持搜索的可读流?

【问题讨论】:

    标签: c# .net stream iostream


    【解决方案1】:

    好吧,您可以检查流的CanReadCanWriteCanSeek 属性。

    不过,我不确定我是否正确理解了您的问题……您到底想做什么?

    某些流永远不可搜索(例如NetworkStreamGZipStream...),因此如果您正在处理这些类型的流,则无法强制它们搜索。

    如果您只想限制流的功能(例如,阻止写入通常可写的流),您可以创建一个包装器,将其实现委托给底层流,但会抛出“禁用”异常" 方法。

    【讨论】:

    • 对不起,如果我不清楚。我想知道除了文档之外,是否有一种方法可以确保 Catalog 的实现始终从 File 属性返回具有特定功能集的流。说可读和可搜索的流。
    【解决方案2】:

    如何抽象底层的持久性机制。您的来电者需要什么?如果它们都需要您的“文件”中的相同行为,您是否可以不创建一个接口来让所有潜在的商店实现,而不是让它们都返回“流”类?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多