一个 ZIP 文件怎么会包含同一个子目录中的多个同名文件呢?

一个 ZIP 文件怎么会包含同一个子目录中的多个同名文件呢?

我一直在提取免费 Pascal 源代码使用 Midnight Commander(在 Mac OS X 下,据我所知,它区分大小写)进入一个空目录,并被询问是否要替换文件。我不记得是哪个文件了,因为我没有认真注意,我不知道是否有多个文件,因为我选择了全部替换,但我记得替换文件的大小与原始文件完全相同,所以我并不担心。但我就是不明白这怎么可能,在同一个 ZIP 档案中找到第二个名称和位置完全相同的文件。

答案1

我认为根据 ZIP 格式,这是完全有可能的。这个问题相当罕见,因为大多数创建 ZIP 文件的软件都会选择更新已经存在的文件,而不是创建第二个文件。我会想办法:也许 ZIP 文件格式使用索引号来跟踪文件,而不是使用文件名来索引?无论如何,正如我模糊的记忆所回忆的那样(当我还是个十几岁的孩子,很多年前玩弄这些东西的时候),如果我制作一个包含两个文件 TEXT1 和 TEST2 的 ZIP 文件,然后使用十六进制编辑器将 TEST2 重命名为 TEXT1,那么我将得到一个包含两个名为 TEXT1 的文件的 ZIP 文件。这绝对不违法。软件的典型行为是在提取后一个文件时询问是否覆盖现有文件。

我还认为我能够通过一些不那么奇怪的活动来创造这种情况,也许是在使用多个文件系统(如 HPFS)时。使用支持 ZIP 未设计的功能的文件系统可能特别容易发生这种情况。

在 Windows 95 中,我认为我可以通过压缩“C:\Program Files\Something.txt”和“C:\Progra~1\SOMETH~1.TXT”来强制执行类似的事情

我不知道你到底做了什么来创建这样一个东西,但报告的结果并不令我惊讶。如果这导致任何严重问题,你可能需要考虑使用其他文件格式。.tar 通常被认为相当不错,并且保留了文件系统详细信息(特别是在类似 Unix 的东西上)。

答案2

正如 patrix 发现的那样(这应该是一个答案,而不是一个让问题变得荒谬的问题编辑),确实有 2 个相同的文件,它们的名称相同,但写法不同:

pse@Mithos:~/.tmp$ unzip -v fpc.zip | grep -i boyscout.inc
    4747  Defl:N     1607  66%  10-13-14 10:25  8b6e16fd  fpc/packages/libgbafpc/src/gba/BoyScout.inc
    4747  Defl:N     1607  66%  01-04-15 02:01  8b6e16fd  fpc/packages/libgbafpc/src/gba/boyscout.inc

并且正如 Tetsujin 所指出的,HFS(Mac OS X 文件系统)默认不允许这样做。

相关内容