我正在编写一个创建文件目录的应用程序。目前,目录信息存储在XML文件中,但我正在尝试将接口抽象到目录,以允许其他未来的存储机制,例如单个ZIP文件,SQL服务器或HTTP服务器。因此,抽象Catalog类不是返回文件路径,而是将文件作为字节流返回。因此,允许文件源是磁盘,也可以是来自数据库或Web服务器的文件。请参阅我之前的related question。
但是,根Stream类包含具有不同功能的Streams。有些流只能读取,其他流只能写入。仍有一些流支持寻求,而其他流则不支持。
是否有通过属性或方法限制流返回的功能?例如,我的Catalog类看起来像这样。
public abstract class Catalog
{
...
public abstract Stream File
{
get;
}
...
}
是否有某种方法可以确保File
始终返回支持搜索的可读流?
答案 0 :(得分:1)
好的,您可以查看信息流的CanRead
,CanWrite
和CanSeek
属性。
我不确定我是否正确理解了你的问题,但是......你还想做什么?
某些流永远不可搜索(例如NetworkStream
,GZipStream
...),因此如果您正在处理这些类型的流,则无法强制它们进行搜索。
如果您只想限制流的功能(例如,阻止写入通常可写的流),您可以创建一个包装器,将其实现委托给底层流,但会抛出“禁用”的异常“方法。
答案 1 :(得分:0)
如何抽象出潜在的持久性机制。你的来电者需要什么?如果他们都需要你的'文件'中的相同行为,你能不能创建一个所有潜在商店实现的接口,而不是让它们都返回'Stream'类?