Objective-C 奇怪的解压缩行为导致文件损坏

Posted

技术标签:

【中文标题】Objective-C 奇怪的解压缩行为导致文件损坏【英文标题】:Objective-C weird unzip behaviour results in corrupt files 【发布时间】:2014-03-24 17:12:00 【问题描述】:

我遇到了一个非常晦涩的问题。 如果我在 Mavericks 上压缩一些东西(右键单击 -> 压缩),它可以在 mac、windows 和 linux 上解压缩,它工作正常并且所有文件都存在。

当我在 ios 设备上使用“ZipArchive”或“SSZipArchive”解压缩时,同一个文件总是损坏。

如果我通过终端压缩文件,它可以在 ios 设备上正常解压缩。

相关文件是一个 50KB 的小视频。我尝试设置不同的标志,看看是否可以通过终端重新创建问题,以找出导致问题的标志,但我找不到原因。

我用最大压缩和最小压缩压缩文件,看看是否是这个原因,我还测试了压缩文件,看看它是否损坏或有任何隐藏字符。

为了让它更奇怪,这些 zip 通常每个可以容纳大约 50 个视频文件,而我有大约 23 个 zip。直到 2 周前,解压缩代码一直运行良好。在过去的 2 周中,我发现了 7 个损坏的文件,并且损坏是一致的 - 总是相同的文件总是损坏的。

损坏的文件通常比工作文件小几 kb,无法打开或强制播放。

它们最初都是使用小牛压缩的,但没有任何改变。

这个问题现在更多的是关于事实调查,因为我可以通过终端压缩文件,但我想知道是什么导致了这个问题,所以我以后可以避开它。

谢谢

【问题讨论】:

确保您尝试在您的设备上提取的 ZIP 文件实际上与您可以在其他平台上提取的那些 ZIP 文件相同 - 也许您的交付机制已损坏。 是的,使用“坏”机制提取文件并将其与使用“好”机制从同一个 zip 中提取的相同文件进行比较,看看有什么不同。 它们是相同的,我们甚至尝试将它们自己添加到设备中,我们仍然面临同样的问题。我们最初认为他们正在检查导致问题的 SSL。 【参考方案1】:

OSX 上的右键单击 -> 压缩选项会创建一个 zip 文件,其中包含一个名为 __MACOSX 的额外目录,其中包含元数据 used by the Finder(图像缩略图和其他内容)。另请参阅this superuser question 以获得更详细的说明。 这个文件夹存在的原因是因为最初的 Mac OS 实现了资源分支的概念——本质上是一种将特定文件/目录的结构化数据与非结构化数据一起存储的方式,因此它可以很容易地被可执行文件访问——***文章 here (也在 SU 问题中引用)

iOS 不理解这种结构,所以解压失败。

【讨论】:

这将是一个完美的解释。没有工作1.5年,突然决定不工作。最近发现的其他信息是它不喜欢使用 python 库进行 Windows 压缩。但永远不要少感谢您的回答。【参考方案2】:

因此,在花了几天时间调查这个问题之后,问题原来是视频转换脚本中的一个标志导致了这个问题,我们还删除了所有文件的所有压缩以确保安全,一切似乎都正常。 非常感谢所有做出贡献的人。

【讨论】:

以上是关于Objective-C 奇怪的解压缩行为导致文件损坏的主要内容,如果未能解决你的问题,请参考以下文章

Powershell解压缩功能 - 奇怪的行为

安卓最强大的解压缩软件——ZArchiver

将游戏部署到服务器会导致奇怪的行为

iOS 资源文件的解压缩与加解密

Ubuntu中的解压缩文件的方式

特殊字符(夏威夷 'Okina)导致奇怪的字符串行为