是否可以限制/要求Stream参数中的某些功能?

时间:2010-07-17 01:18:37

标签: c# .net stream iostream

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

但是,根Stream类包含具有不同功能的Streams。有些流只能读取,其他流只能写入。仍有一些流支持寻求,而其他流则不支持。

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

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

是否有某种方法可以确保File始终返回支持搜索的可读流?

2 个答案:

答案 0 :(得分:1)

好的,您可以查看信息流的CanReadCanWriteCanSeek属性。

我不确定我是否正确理解了你的问题,但是......你还想做什么?

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

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

答案 1 :(得分:0)

如何抽象出潜在的持久性机制。你的来电者需要什么?如果他们都需要你的'文件'中的相同行为,你能不能创建一个所有潜在商店实现的接口,而不是让它们都返回'Stream'类?