如何在 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 文件中找到“中央目录”的开头? 的相关文章

  • Ant 构建类路径 jar 生成“打开 zip 文件时出错”

    我有一个在 eclipse 中构建的项目 依赖于第 3 方 jar 我正在尝试为 ant 生成一个合适的构建文件 使用 Eclipses 内置的导出 gt ant 构建文件功能作为起始块 当我运行构建目标时 出现以下错误 javac err
  • 检查 Zip 文件是否受密码保护

    我正在使用 PowerShell 提取多个 ZIP 文件 其中一些文件受密码保护 要求是跳过受密码保护的文件 当此代码遇到受密码保护的文件时 它会显示一个输入密码的框 有什么方法可以在解压 ZIP 文件之前检查它是否受密码保护吗 我试过点网
  • 在 Mac 上解压缩大型 ZIP 档案(例如最新的 Microsoft Edge VM)

    尝试在我的 Mac 上解压最新的 Microsoft Edge Vm zip 文件后 我最终得到一个 cpgz 文件 它应该为 virtualBox 生成一个 ova 文件 有人知道怎么修这个东西吗 http mattormeeple co
  • 如何强制使用我的程序打开某种类型的任何文件?

    我有一个构建程序 可以打开 sdf 文件并显示所有表格和数据 如何强制我的计算机中的任何 sdf 文件都将用我的程序打开 提前致谢 你不能 您可以将您的程序与特定的文件扩展名相关联 但不能强制用户使用您的程序打开文件 甚至注册条目也很容易更
  • 版本控制压缩文件(docx、odt)

    有些格式实际上是伪装的 zip 文件 例如docx 或 odt 如果我将它们直接存储在版本控制中 它们将被作为二进制文件处理 我理想的解决方案是 有一个钩子可以创建一个foo docx 每个目录foo docx提交之前的文件 将所有文件解压
  • 使用 Python 将文件列表添加到 zip 文件中

    我想编写一个脚本将所有 py 文件添加到 zip 文件中 这是我所拥有的 import zipfile import os working folder C Python27 files os listdir working folder
  • PHP 中的 zipArchive 打开错误

    无法在 PHP 中创建 zip 存档 总是返回Ziparchive ER MULTIDISK fileName SERVER DOCUMENT ROOT temp temp zip zip new ZipArchive err zip gt
  • 如何在 Windows 中从 Google Code 下载/签出项目?

    当没有准备好的可用下载时 如何从 Google Code 下载整个项目的 ZIP 文件 这是我在结帐页面上看到的 命令行访问使用此命令可以匿名查看最新的项目源码 svn checkout http myproject googlecode
  • 如何在 Rails 5.x.x 应用程序中以 Zip 格式从 S3 下载多个文件?

    我正在实现允许用户从 S3 下载单个文件或多个文件的功能 单个文件下载工作正常 但对于多个文件 我在 Heroku 上收到错误 Errno ENOENT No such file or directory rb file s lstat 用
  • 如何在 Xamarin for Android 中压缩文件?

    我有一个函数可以创建一个 zip 文件和传递的文件字符串数组 该函数确实成功创建了 zip 文件及其内部的 zip 条目文件 但这些 zip 条目文件是空的 我尝试了几种不同的方法 下面的函数代码是我最接近的工作代码 public stat
  • 提取 Zip 内的目录

    我正在编写一个脚本 将 zip 存档中的文件提取到该脚本所在的目录中 这是我的代码 zip new ZipArchive if zip gt open latest zip TRUE zip gt extractTo zip gt clos
  • 使用node.js核心zlib模块压缩成.zip文件

    如何压缩一个或多个文件并将其保存到 zip包含所提供的 node js 的扩展文件zlib https nodejs org api zlib html模块 我想出了如何保存到 gz使用 gzip 如下 const gzip zlib cr
  • 这个文件格式叫什么

    我需要解析以下格式的文件 General Description Some Text Version 4 ProjType 1 Configurations Mice BuildOutputs BuildProject OutputFile
  • 上传 Zip 文件并解压

    我有一个表单 HTML 它将文件提交到 PHP 脚本 该脚本将文件重命名为 ZIP 将其存储在文件夹 随机名称 中 然后提取该文件 文件已上传 该文件夹已正确创建 文件被正确重命名 zip 提取失败 这是我的表格
  • PDF 文件中的隐写术 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有人能告诉我 哪里可以将一些数据隐藏到 PDF 文件中吗 换句话说 PDF 文件中的隐写术 有什么算法可以做到这一点吗 有很多方法可以做到这一点 包括
  • 当所有其他列都保证相同时,仅从 CSV 文件中读取选定的列

    我有一堆 CSV 文件 我试图将它们连接成一个 csv 文件 CSV 文件由一个空格分隔 如下所示 initial pos orientation ratio chr 106681 0 06 chr 106681 0 88 chr 1066
  • 确定文件是否是 zip 存档内的目录

    我根据规范读取 zip 文件 并从中央目录获取每个文件的信息 从标题中我读到 define VERSION NEEDED OFSSET 6 UINT16 versionNeeded UINT16 zipFile VERSION NEEDED
  • 如何在android中直接从.zip文件读取文件而不解压它

    过去几个月我一直在研究 android 现在我的问题是读取放在 sdcard 上的 zip 文件 我已经成功完成了将 zip 文件下载到 SD 卡上的编码 我已将 img zip 文件下载到 SD 卡上 此 img zip 包含 5 个图像
  • 如何在 Python 中仅列出 zip 存档中的文件夹?

    如何仅列出 zip 存档中的文件夹 这将列出存档中的每个文件夹和文件 import zipfile file zipfile ZipFile samples sample zip r for name in file namelist pr
  • 在 Ruby 中处理 Zip 文件 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在ruby中仅在内存中创建zip文件 https stackoverflow com questions 11532502 how to create zip file only in memor

随机推荐