c# - 是否可以在 Stream 参数中限制/要求某些功能?

标签 c# .net stream iostream

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

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

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

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

有什么方法可以确保 File 总是返回支持查找的可读流吗?

最佳答案

那么,您可以检查流的CanReadCanWriteCanSeek 属性。

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

某些流永远无法搜索(例如 NetworkStreamGZipStream...),因此如果您正在处理这些类型的流,则没有办法迫使他们寻求。

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

关于c# - 是否可以在 Stream 参数中限制/要求某些功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3269807/

相关文章:

c# - 如何评论公开可见的类型枚举?

.NET:为什么在每个对象中存储同步块(synchronized block)?

c# - 如何使用 .Net Api c# 获取 AutoCad 几何属性

python - IP 摄像机捕获 RTSP 流大延迟 OPENCV

c# - Web API Controller ,RESTful Web 方法。 (有 Angular )

c# - 调用第三方DLL中的方法

.net - 如何根据没有侧边栏的母版页向 .net 页面添加侧边栏

go - 如何使用golang查询将数据流传输到Cassandra

javascript - node.js 流中的控制流

c# - 如何更新Web.config以通过C#通过电子邮件发送错误?