zip中心目录不能列出中间文件夹是否合法?

时间:2018-04-25 14:29:55

标签: zip

zip文件包含zip中每个文件的标题,称为中央目录:https://en.wikipedia.org/wiki/Zip_(file_format)#Central_directory_file_header

但是,这并未定义包含一个文件的zip是否为“foo / bar / baz.txt”只能有一个条目,或文件夹是否也有条目?我在APPNOTE

中找不到答案

答案将有助于确定某些Java API中zip压缩条目处理的哪些实现是正确的。例如。如何正确确定zip子文件夹中的所有1级深度条目。

Set<String> getResourcePaths(String path) {
  //???
}
getResourcePaths("/foo") -> ["/foo/bar"]

根据zip规范允许哪些或者通过各种压缩,解压缩和(子)条目列表工具最常接受?

foo/
foo/bar/
foo/bar/baz.txt

B:

foo/
foo/bar/baz.txt

C:

foo/bar/baz.txt

最初的问题是java jar不包含 some (在本例中为选项B)目录条目,但是代码列出了假设这些条目存在的zip条目,因此最终导致资源不存在找到。

1 个答案:

答案 0 :(得分:1)

实际上,更重要的是解压缩器如何处理它。无论如何:标准的unix zip程序有一个选项-D,它忽略了空的目录路径。 这是你在mc中预览它的方法:

enter image description here

创建的文件没有选项-D:

enter image description here

当然,您可以使用我所知道的任何工具解压缩它们(解压缩,内置Windows工具,7z),所以我会说程序会处理它。

但是,如果出于任何原因,保留所有子路径会更好 - 让我们这样做。