我有一个 FileStream,它由放入一个文件中的多个文件组成,并且我有一个文件长度的列表,换句话说,我可以轻松计算所有文件的位置和长度。我想要创建的是一个 Open 方法,它接受文件索引并返回仅包含该文件的流。目前我已经使用内存流实现了这一点,但这迫使我将整个(不是容器,而是整个包含的)文件复制到内存中,而我不想这样做。所以,我希望能够做的是创建一个实现流并接受另一个流、偏移量和长度参数的类,然后是可读和可查找的,只有当您执行 Seek(0) 时,您才应该获得偏移量的底层流。就像适配器类一样,我想知道这是否可能,甚至是一个好主意,或者是否有人对如何解决这个问题有更好的想法。我意识到,如果我按照我刚才描述的方式进行操作,我需要确保对底层流的访问是同步的,并且所有打开的部分流都拥有一个私有变量,告诉它们当前在流中的位置,但是这个应该是可行的,对吧?以前有人做过这样的事情吗?或者有一个简单的 .NET 类我可以使用吗?任何帮助,将不胜感激。
哦,抱歉英语不好,我忘记用英语安装浏览器,所以拼写检查器告诉我一切都错了。
如果您使用.NET 4.0,您可以使用内存映射文件 http://msdn.microsoft.com/en-us/library/dd997372.aspx。它们几乎完成了您所描述的操作:您可以将由偏移量和长度指定的大文件的“视图”映射到内存中,并使用Stream
.
否则,我认为你的方法听起来不错。只需注意涉及超出预期文件边界的读取或写入的极端情况!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)