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 奇怪的解压缩行为导致文件损坏的主要内容,如果未能解决你的问题,请参考以下文章