【问题标题】:Swift ZIPFoundation extract string in memory is not working内存中的 Swift ZIPFoundation 提取字符串不起作用
【发布时间】:2022-07-01 15:37:36
【问题描述】:

您好,我在 https://github.com/weichsel/ZIPFoundation 的 Swift 中使用 ZipFoundation

我的要求是解压内存中的文件内容,直接转成String。

let archive = Archive(url: fileUrl, accessMode: .read, preferredEncoding: .utf8)
do{
   try archive?.extract(entry, consumer: {data in
      print(data.count)
    })
  }catch{}

存档对象始终为空,它不读取 zip 文件。 还有要传递给提取方法的入口对象是什么?

任何帮助将不胜感激。

【问题讨论】:

  • 也许“入口”不在 zip 文件中,你为“入口”传递了什么?如果你发现错误并打印出来怎么办?
  • 存档为零(检查 fileUrl、权限)?
  • 该文件位于 assets 文件夹中,因此它具有权限,还尝试使用 NSData 访问其读取。你有什么代码可以在内存中读取,你能分享一下吗?
  • 用于归档中的条目,其中 entry.type == .file { print(entry.fileName); if let data = archive.extract(entry) { ... } }}
  • 您是否会收到警告,因为您正在执行 do/catch 但没有真正尝试,因为您忽略了try? 可能引发的错误。至少,改写try!,它可能会崩溃,或者使用try(没有问号),并打印控制台中捕获的error。

标签: ios swift zipfoundation


【解决方案1】:

ZIP Foundation 档案支持下标。这允许您通过archive["path/to/file.txt"] 下标Archive 来获得Entry。

要访问所获得文件的内容,请使用基于闭包的extract 版本,如下所示:

guard let archiveURL = Bundle.main.url(forResource: "archive", withExtension: "zip"),
    let archive = Archive(url: archiveURL, accessMode: .read),
    let entry = archive["test/data.random"]
else { return }

_ = try? archive.extract(entry) { data in
print(data.count)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多