如何在 zip 文件中找到“中央目录”的开头?

2024-02-12

维基百科对 ZIP 文件格式有很好的描述 http://en.wikipedia.org/wiki/ZIP_(file_format),但“中央目录”结构让我感到困惑。具体来说是这样的:

这种顺序允许一次创建 ZIP 文件,但通常通过首先在最后读取中央目录来解压缩。

问题在于,即使是中央目录的尾随标头也是可变长度的。那么,如何才能获得要解析的中央目录的开头呢?

(哦,在来这里询问之前,我确实花了一些时间徒劳地查看 APPNOTE.TXT :P)


我的哀悼,阅读维基百科的描述给我一个非常强烈的印象,你需要做大量的猜测+检查工作:

从末尾向后查找 0x06054b50 目录结束标记,向前查找 16 个字节以找到目录开始标记 0x02014b50 的偏移量,并希望就是这样。您可以进行一些健全性检查,例如在目录结束标记后查找注释长度和注释字符串标记,但感觉 Zip 解码器确实有效,因为人们不会将有趣的字符放入 zip 注释、文件名等中向前。无论如何,完全基于维基百科页面。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 zip 文件中找到“中央目录”的开头? 的相关文章

  • 将文件打包为 ELF 可执行文件

    我目前正在寻找一种将数据添加到已编译的 ELF 可执行文件中的方法 即将文件嵌入到可执行文件中而不需要重新编译它 我可以通过使用轻松做到这一点cat myexe mydata gt myexe with mydata 但我无法访问可执行文件
  • 如何在 Ruby 中迭代内存中的 zip 文件

    我正在编写一个单元测试 其中一个测试返回一个 zip 文件 我想检查该 zip 文件的内容 从中获取一些值 并将这些值传递给下一个测试 我正在使用 Rack Test 所以我知道我的 zip 文件的内容在里面last response bo
  • 如何强制使用我的程序打开某种类型的任何文件?

    我有一个构建程序 可以打开 sdf 文件并显示所有表格和数据 如何强制我的计算机中的任何 sdf 文件都将用我的程序打开 提前致谢 你不能 您可以将您的程序与特定的文件扩展名相关联 但不能强制用户使用您的程序打开文件 甚至注册条目也很容易更
  • 如何从文件字节开始在内存中创建 zip 文件?

    我尝试使用 C 在内存中创建一个 zip 文件 但结果是一个 zip 文件 其中包含损坏的文件 所有要压缩的文件都在数据库中 我存储字节 文件为 PDF 格式 我的代码如下 extract bytes and file name for e
  • 在 zip 中写入(修改或添加)文件

    我已按照中的说明进行操作这个线程 https stackoverflow com questions 13787318 java util zip replace a single zip file 使用其中的代码 我已经能够将文件添加到
  • PHP zipArchive 类的大小限制?

    我正在 PHP 中创建一个 zip 文件供用户下载 我没有从 PHP 或检查 zipArchive 类的 GetStatusString 函数中得到任何错误 但是 如果我将一些文件放入存档中 那么当我尝试打开它时 我会收到错误 压缩的 zi
  • Shutil make_archive 生成​​嵌套的 .zip 文件 [重复]

    这个问题在这里已经有答案了 我一直在尝试使用make archive https docs python org 3 library shutil html shutil make archive from shutil图书馆 这是代码 带
  • 提取 Zip 内的目录

    我正在编写一个脚本 将 zip 存档中的文件提取到该脚本所在的目录中 这是我的代码 zip new ZipArchive if zip gt open latest zip TRUE zip gt extractTo zip gt clos
  • 可以列出 zip / rar 文件内容的 PHP 库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用其内容识别图像文件格式?

    如果图像文件的格式为 png那么它将包含 PNG 位于文件的开头 当读入Text mode 如果图像文件的格式为 bmp那么它将包含BM 位于文件的开头 当读入Text mode 我知道图像格式在文件开头包含一定大小 字节 的文本 数据 这
  • 如何使用 JSZip 使用 Node.js 中的缓冲区内容生成 zip 文件?

    我有一个字符串数组 应将其写入 txt 文件 另外 我需要使用 JSZip 将生成的 txt 文件压缩为 zip 格式 在客户端 我能够使用该字符串数组生成 文本 纯文本 Blob 然后使用 JSZip 将此 Blob 压缩为 zip 格式
  • 覆盖 ZipArchiveEntry 的内容

    如何覆盖 a 的内容ZipArchiveEntry 以下代码使用StreamWriter with StringBuilder如果新文件内容比原始文件内容短 则会失败 例如 using System IO Compression using
  • 在python中解压嵌套的zip文件

    我正在寻找一种在 python 中解压缩嵌套 zip 文件的方法 例如 考虑以下结构 为方便起见 使用假设名称 Folder ZipfileA zip 压缩文件A1 zip 压缩文件A2 zip ZipfileB zip 压缩文件B1 zi
  • 使用 Java 将文件附加到 zip 文件

    我当前正在提取一个 war 文件的内容 然后将一些新文件添加到目录结构中 然后创建一个新的 war 文件 这一切都是通过Java以编程方式完成的 但我想知道复制战争文件然后附加文件是否会更有效 然后我就不必等待战争扩大然后必须再次被压缩 我
  • 上传 Zip 文件并解压

    我有一个表单 HTML 它将文件提交到 PHP 脚本 该脚本将文件重命名为 ZIP 将其存储在文件夹 随机名称 中 然后提取该文件 文件已上传 该文件夹已正确创建 文件被正确重命名 zip 提取失败 这是我的表格
  • 如何从 Java 中的 HttpResponse 获取单个表单字段并将其写入文件?

    我正在调用客户端的下载服务 该服务会发回 MIME 数据并尝试保存 zip 文件 该服务不仅返回文件本身 还返回其他几个 MIME 字段 因此 当我使用entity getContent 打开输入流时 我最终将所有这些数据写入我的zip 文
  • ZipInputStream.getNextEntry() 如何工作?

    假设我们有这样的代码 File file new File zip1 zip ZipInputStream zis new ZipInputStream new FileInputStream file 假设您有一个包含以下内容的 zip
  • Github 下载文件夹为 zip

    如何为我的 Github 存储库的访问者提供一个链接 以将我的存储库的 builds 文件夹下载为 zip 文件 该文件夹包含应用程序所需的可执行文件 着色器和纹理 当然 我可以手动构建该目录的 zip 文件并将其添加到存储库中 但这会导致
  • System.IO.Compression 和 ZipFile - 提取并覆盖

    我使用标准 VB NET 库来提取和压缩文件 它也可以工作 但是当我必须提取并且文件已经存在时 问题就出现了 我使用的代码 Imports Imports System IO Compression 崩溃时我调用的方法 ZipFile Ex
  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how

随机推荐