首页 > 解决方案 > NSData.decompressed 在 Swift 中抛出错误

问题描述

嘿伙计们,我想在 Swift 中使用 NSData 的解压缩方法解压缩一个 gz 文件。该文件已成功加载到 NSData 中,但如果我尝试解压缩它,它会引发错误。

var data: NSData
let paths = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask)
var url = paths[0]
    
url.appendPathComponent("g.srt.gz")

do {
    data = try Data(contentsOf: url) as NSData
    print(data)
    let dec = try data.decompressed(using: .zlib)
        
} catch { print(error.localizedDescription) }

这是我看到的输出:

{length = 17859, bytes = 0x1f8b0800 00000000 00038d7d cd8ee446 ... 10deea38 94b70000 }
The operation couldn’t be completed. (Cocoa error 5377.)

我尝试了所有的 DecompressionAlgorithms,我总是得到上面的错误。在 Finder 中我可以解压它,所以它没有损坏。

我是否缺少某些东西(Info.plist 中的功能或其他内容)?我不想使用任何外部库或框架。

我的环境是 macOS 11.3.1、Xcode 12.5、Swift 5

标签: swiftcompressiongzipnsdata

解决方案


该数据是 gzip 流,而不是 zlib 流。您使用的方法没有 gzip 选项。请参阅此答案以获取解决方案。


推荐阅读