在构建提取 ZIP 文件的应用程序时,我注意到有时 ZIP 文件明确包含目录条目,有时则不包含。例如给出以下结构
folder1/
└── file1
我发现通过以下方式列出内容时给出以下不同输出的文件unzip -lv file.zip
:
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
5 Stored 5 0% 2023-04-20 13:54 3bb935c6 folder1/file1
-------- ------- --- -------
5 5 0% 1 file
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
0 Stored 0 0% 2023-04-20 13:54 00000000 folder1/
5 Stored 5 0% 2023-04-20 13:54 3bb935c6 folder1/file1
-------- ------- --- -------
5 5 0% 2 files
请注意第二个中明确指定的文件夹。
这里的标准是什么?程序通常会假设如何处理这个问题吗?两者之一有优势吗?
答案1
标准没有指定这一点,但常见的做法是将目录存储为单独的条目,以便也可以存储目录元数据。
由于 ZIP 文件没有单独的目录条目是有效的,程序不应该以任何方式对它们做出假设。
(使用 Info-Zip 时zip
,该-D
标志会跳过存储目录条目。)