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

标签 ios objective-c cocoa-touch compression zip

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

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

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

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

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

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

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

他们最初都是用特立独行的方式压缩的,现在什么都没有改变。

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

谢谢

最佳答案

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

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

关于ios - Objective-C 奇怪的解压缩行为导致文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616092/

相关文章:

ios - 点击时 Sprite 方向改变?

ios - 如何通过点击单元格上的按钮从 TableView 中删除单元格?

iPhone - UIImagePickerController -> 将图像保存到应用程序文件夹

iphone - 集成到搜索栏中的事件指示器不会显示在 iPhone SDK 中

iphone - 具有对多关系的复杂核心数据谓词

iphone - 在 iOS 中与 Instagram 上的图像共享文本

ios - 我无法在 xcode 9.1 中的 UIButton 上显示图像

ios - Objective-C 中的参数类型 (void *) 如何转换为 Swift 中的 UnsafePointer<()> ?

ios - UIPageViewController 防止在滚动时隐藏键盘

objective-c - 如何使用EventKit Framework提前一年设置提醒