【问题标题】:What is the EOF marker for a ZIP file?ZIP 文件的 EOF 标记是什么?
【发布时间】:2009-02-06 14:49:46
【问题描述】:

我有一个使用 SharpZIPlib 解压缩一些 zip 文件的 C# 程序?它工作正常,但在一个文件上,我不断收到“Unexpected EOF”错误?实际上是否存在 EOF 标记,或者 Zip 文件是否被截断?

【问题讨论】:

    标签: c# zip file-format eof


    【解决方案1】:

    您的文件被截断(或可能扩展或损坏)。

    您可以在其上运行常规解压缩程序(例如“unzip -l file.zip”)来证明这一点。

    顺便说一句,如果您使用 FTP 下载文件,您还记得使用二进制传输吗?如果您(不小心)使用了 ASCII 模式,那将破坏任何二进制文件,例如 ZIP 存档。

    【讨论】:

      【解决方案2】:

      一个简单的 ZIP 文件如下所示:

      LocalHeader1
      CompressedData1
      LocalHeader2
      CompressedData2
      [...]
      LocalHeaderN
      CompressedDataN
      CentralHeader1
      CentralHeader2
      [...]
      CentralHeaderN
      EndHeader
      

      EndHeader 包含(除其他外)第一个 CentralHeader 的偏移量,然后每个 CentralHeader 包含与其匹配的 LocalHeader 的偏移量。

      有些库可以从一开始就读取zip文件,依次处理LocalHeaders,从而恢复损坏的zip文件可以恢复的内容。

      【讨论】:

      • DotNetZip (dotnetzip.codeplex.com) 可以选择对 zip 文件进行全面扫描,而忽略目录。这允许您从现有的 zip 条目重建 zip 目录,以查找损坏或截断的文件。
      【解决方案3】:

      Unexpected EOF 的确切含义是:在读取文件时,函数遇到了文件末尾,而库期待其他东西(数据)。它不是标记。

      【讨论】:

        【解决方案4】:

        您尝试过 DotNetZip 吗? http://www.codeplex.com/DotNetZip

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-11
          • 2018-06-26
          • 1970-01-01
          相关资源
          最近更新 更多