因此,很奇怪,我可以解压缩Windows上创建的朋友的文件。它给出的结果很奇怪,并且以我以前从未见过的方式是不正确的。
<base directory stuff>
assets\Changes.txt
assets\DefaultConfig,txt
等等。它显然是一个子目录,但它们会以带有反斜杠的文件形式出现。
他们在Windows上制作了它(使用Compress-Archive powerscript命令),我试图在Linux上使用ark
KDE中的程序和GNOME中的archive-manager提取它。
这里发生了什么?
之所以会发生这种情况,是因为某些Windows工具显然使用反斜杠(\
)作为分隔符,因此应该使用正斜杠(/
)。Unix中的反斜杠可以是文件名或目录名的一部分。
.ZIP文件格式规范(我撰写本文时版本为6.3.5,于2018年11月20日修订)指出:
4.4.17.1文件名,带有可选的相对路径。存储的路径不得包含驱动器或设备字母或斜杠。为了与Amiga和UNIX文件系统等兼容,所有的斜杠必须是正斜杠
/
,而不是反斜杠\
。如果输入来自标准输入,则没有文件名字段。
Microsoft在缓解ZipArchiveEntry.FullName
文件:Path Separator中提到了此文件:
从针对.NET Framework 4.6.1的应用程序开始,该
ZipArchiveEntry.FullName
属性中使用的路径分隔符已从.NET Framework早期\
版本中使用的反斜杠()更改为正斜杠(/
)。[...]影响
所做的更改使.NET实现与.ZIP文件格式规范的4.4.17.1节保持一致,并允许在非Windows系统上对.ZIP存档进行解压缩。
在非Windows操作系统(例如Macintosh)上解压缩由针对.NET Framework早期版本的应用程序创建的zip文件无法保存目录结构。例如,在Macintosh上,它将创建一组文件,这些文件的文件名将目录路径以及所有反斜杠(
\
)字符和文件名连接在一起。结果,未保留解压缩文件的目录结构。
请注意,如果存档器使用了某些旧版本的.NET Framework,或者根本没有使用它,而是对压缩文件实施了自己(独立)的方法,则可能存在该问题。
rar可能会遇到相同的问题:Unrar用名称中的反斜杠(而不是正确的目录层次结构)创建文件。
您可能会在Unix&Linux SE上发现此问题有帮助:将Windows创建的ZIP转换为Linux(内部路径问题)。我的(有点实验)方法就是这个答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句