因为 ZIP 文件可能被附加到,所以只有在文件末尾的中央目录中指定的文件才有效。扫描 ZIP 文件以查找本地文件头是无效的(除非存档损坏),因为中央目录可能会声明某些文件已被删除而其他文件已被更新。
例如,我们可以从包含文件 A、B 和 C 的 ZIP 文件开始。然后删除文件 B 并更新文件 C。这可以通过在原始 ZIP 文件的末尾附加一个新文件 C 并添加一个仅列出文件 A 和新文件 C 的新中央目录来实现。在最初设计 ZIP 时,通过软盘传输文件很常见,但是写入磁盘非常耗时。如果你有一个很大的 zip 文件,可能跨越多个磁盘,并且只需要更新几个文件,而不是读取和重写所有文件,那么读取旧的中央目录,追加新文件会快得多然后附加一个更新的中央目录。
[…]
正确读取 ZIP 档案的工具必须扫描中央目录记录签名的结尾,然后酌情扫描其他指示的中央目录记录。他们不能从 ZIP 文件的顶部扫描条目,因为(如本节前面提到的)只有中央目录指定文件块的开始位置并且它没有被删除。扫描可能会导致误报,因为该格式不禁止其他数据位于块之间,也不禁止文件数据流包含此类签名。但是,试图从损坏的 ZIP 存档中恢复数据的工具很可能会扫描存档以查找本地文件头签名;[…]
创建新存档文件时
如果您像示例中一样重新创建存档,则新存档将不包含已删除的文件;它也不会包含现有文件的旧版本。
修改存档文件时
您创建新存档文件的示例与标题有些不同:
如果您直接从 zip 文件中删除某些内容,它可能会或可能无法恢复。
ZIP 作为一种格式,允许仅通过更新存档末尾的中央目录来删除条目,而无需重建存档的其余部分。同样,可以在不触及旧数据的情况下附加一些现有文件的新版本。
来自维基百科(强调我的):
从 zip 文件中删除条目的工具可以:
这里的“recovered”是指“仅从归档文件中恢复”,而不是“从文件系统/磁盘/内存/缓存/...中恢复”。您似乎担心您将存档文件发送给的人是否可以恢复任何内容。如果您将存档发送给无法访问您的机器的人,那么从您的文件系统/磁盘/内存/缓存/…中恢复任何内容的能力(如果有)是无关紧要的,因为这是您的能力,而不是他们的能力。
这取决于。
当您从 ZIP 中删除数据时,它(很可能)会从存档中物理删除(在极少数情况下,数据会保留在那里)。然后您的 zip 文件将替换为其新版本。
不同之处在于文件被覆盖时各种操作系统或文件系统如何处理方案。某些系统可能会将数据写入驱动器上的全新位置 - 在这种情况下,可以通过恢复软件分析整个驱动器来恢复数据。如果新版本是“直接写入同一扇区”,那么您的数据可能会丢失。
检查文件历史记录(如果已启用)和各种在线驱动器也是值得的——它们通常会保留以前版本的文件一段时间。