You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ZipArchiveMode.Read时,ZipArchive首个条目流为何不可Seek?

关于ZipArchive第一个条目流无法Seek的问题

这是正常现象,并非异常问题。

  • ZipArchive.Entries[0].Open()返回的deflate压缩流本身就不支持Seek操作。因为deflate是流式压缩算法,解压缩必须按顺序处理数据,没办法随机定位,所以访问这个流的Position属性时会抛出InvalidOperationException,这完全符合设计预期。
  • 你提到第二个条目没有这个问题,大概率是该条目未使用deflate压缩(比如采用了存储模式),这种情况下返回的流支持基础的Seek和Position访问;也有可能是打开后续条目时,ZipArchive已经读取到对应条目的数据位置,内部流状态允许有限的定位操作。

如果需要对第一个条目的流进行Seek操作,可以先把流的内容完整读取到内存流中,再对内存流操作,示例代码:

using (var archive = ZipFile.OpenRead("example.zip"))
{
    var firstEntry = archive.Entries[0];
    using (var entryStream = firstEntry.Open())
    using (var memoryStream = new MemoryStream())
    {
        entryStream.CopyTo(memoryStream);
        memoryStream.Position = 0; // 此时可正常Seek和访问Position
        // 后续对memoryStream执行操作
    }
}

内容的提问来源于stack exchange,提问作者SpiritBob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:35:04