如何修复损坏的 Zip 文件

Recovering Corrupt Zip Files

当重要的 Zip 文件意外损坏时,数据丢失的焦虑感油然而生。这篇文章分享了在 www.construct.net 上关于恢复损坏 Zip 文件的实用技巧。作者通过实际案例,详细讲解了如何识别文件损坏的原因,以及使用特定工具进行修复的步骤。内容涵盖了从基础检查到高级修复策略,帮助读者在关键时刻挽救宝贵数据。无论你是开发者还是普通用户,这些方法都能让你在遇到 Zip 文件问题时更加从容应对。

即使文件看起来已经无法打开,通过正确的工具和步骤,我们仍然有机会恢复其中的重要数据。
  1. dotancohen

    > 最近我们遇到了一个特别糟糕的案例:一位客户发给我们一个约 1 GB 的项目文件,文件已损坏,这是他们为一款已在 Steam 上发布的游戏花费数月心血制作的成果。他们告诉我们所有的备份也都损坏了……不出所料,WinRAR 的修复工具生成了一个 1 GB 的 ZIP 文件,里面却空空如也。

    在各大操作系统以及一些次要系统、文件系统、不靠谱的传输协议和不可靠的存储介质上创建和存储 ZIP 文件长达三十年,让我觉得这家公司遇到的大量 ZIP 文件损坏问题,与文件格式本身或客户的不当操作毫无关系。我认为可能是他们的软件生成了有问题的 ZIP 文件。

  2. CrendKing

    我刚测试了一下。7-Zip 已经做了作者那个恢复工具正在做的事:如果我删除文件末尾的元数据,它仍然可以打开并提取文件,只是会抱怨一个无害的“Unexepcet end of data”错误。更进一步,即使我删除了最后一个文件的实际内容,它仍然能显示目录结构,只是无法提取最后一个文件的数据。

  3. cmovq

    > 或许令人惊讶的是,ZIP 文件将列出文件内容的中央目录放在文件的末尾

    这在归档文件中非常常见。它让你可以轻松地将文件追加到归档末尾(覆盖目录),然后写入更新后的目录。如果目录在开头,想要扩展目录你就得重写整个归档的内容。

  4. Dan42

    这是一个关于软件深挖和边缘案例的有趣故事,但我对这一点有疑问:

    > 像未压缩大小和 CRC-32 这样的信息可以被忽略。

    如果你计算一个运行中的 crc32,你就可以检查该值以及未压缩大小,这样就有 8 字节的精度。而且如果你在解压过程中同时检查未压缩大小,就能获得 12 字节的精度。这肯定足以确保你总是能找到 ZIP 中文件的真实边界。

  5. shortercode

    ZIP 文件是一个典型的例子:它行之有效,被广泛使用,却包含许多奇怪的设计决策。其中一些是历史遗留问题,另一些则不然。但要想让客户或朋友替换掉它们,祝你好运。

    它们有一些很酷的优势。比如可以直接从归档中读取文件而无需解压整个文件,支持每个文件的校验和,以及对那些无法从压缩中获益的部分跳过压缩。你还可以在文件中塞入大量任意数据而不改变文件本身……这有点奇怪,但有时也有用?

    糟糕的地方在于它们到处使用 32 位整数,因此依赖各种 hack 来支持更大的文件。无法支持真正的流式解压。实现方式差异很大,兼容性也参差不齐。它们还有许多古老且奇怪的功能,人们实际上很少使用。比如可以将 ZIP 文件分割成多个部分,以及一些古老的压缩技术等。

同日更多故事

2026-08-29