在C#中创建部分或有界FileStream

问题描述

|| 我有一个FileStream,它由多个文件放入一个文件中,并且我有文件长度的列表,换句话说,我可以轻松地计算所有文件的位置和长度。我要创建的是一种开放方法,该方法采用fileindex并返回仅包含该文件的流。目前,我已经使用内存流实现了这一点,但是这迫使我将整个文件(不是容器,而是整个包含的文件)复制到内存中,而我不想这样做。所以,我想做的是创建一个类,该类实现流并接受另一个流,偏移量和长度参数,然后可读且可检索,只有当您执行Seek(0)时,您才应该获取偏移量底层流。就像适配器类一样,我想知道这是否可能,甚至是个好主意,或者是否有人对如何解决此问题有更好的主意。我意识到,如果按照我刚才描述的方式进行操作,则需要确保对底层流的访问是同步的,并且所有打开的部分流都拥有一个私有变量,该私有变量告诉它们当前在流中的位置,但这应该很可爱吧?有人做过这样的事吗?还是有我可以使用的Simpel .NET类?任何帮助,将不胜感激。 哦,对不起,英语不好,我忘了用英语安装浏览器,所以拼写检查告诉我一切都错了。     

解决方法

        如果您使用的是.NET 4.0,则可以使用内存映射文件。它们几乎完成了您所描述的操作:您可以将由偏移量和长度指定的大文件的“视图”映射到内存中,并使用“ 0”访问文件的该部分。 否则,我认为您的方法听起来不错。只是要小心一些涉及超出预期文件范围的读写操作!