【问题标题】:Creating a partial (or bounded) FileStream in C#在 C# 中创建部分(或有界)文件流
【发布时间】:2011-09-14 02:48:52
【问题描述】:

我有一个 FileStream,它由放入一个文件中的多个文件组成,并且我有一个文件长度列表,换句话说,我可以轻松计算所有文件的位置和长度。我要创建的是一个 Open-method,它接受一个文件索引并返回一个只包含该文件的流。目前我已经使用内存流实现了这一点,但这迫使我将整个(不是容器,而是整个包含的)文件复制到内存中,我不想这样做。所以,我想做的是创建一个实现流并采用另一个流、偏移量和长度参数的类,然后是可读和可搜索的,只有当你执行 Seek(0) 时,你才应该到达偏移量的底层流。所以就像一个适配器类,我想知道这是否可能,甚至是一个好主意,或者是否有人对如何解决这个问题有更好的想法。我意识到,如果按照我刚才描述的方式进行操作,我需要确保对底层流的访问是同步的,并且所有打开的部分流都包含一个私有变量,告诉它们当前在流中的位置,但是这个应该是 dooable 吧?有没有人做过这样的事情?还是有一个简单的.NET 类我可以使用?任何帮助将不胜感激。

哦,抱歉英语不好,我忘了安装英文浏览器,所以拼写检查器告诉我一切都错了。

【问题讨论】:

    标签: c# file stream


    【解决方案1】:

    如果您使用的是 .NET 4.0,则可以使用 memory-mapped files。它们的功能与您所描述的差不多:您可以将由偏移量和长度指定的大文件的“视图”映射到内存中,并使用 Stream 仅访问文件的该部分。

    否则,我认为您的方法听起来不错。请注意涉及超出预期文件边界的读取或写入的极端情况!

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      相关资源
      最近更新 更多