Swift : unzip file


#1

Добрый день! Каким образом в свифте можно разархивировать zip файл, не прибегая ко всяким сторонним фреймворкам? В моем случае, есть zip файл, в котором содержится один текстовый документ, и необходимо получить String этого документа. Какое самое простое решение?


#2

У вас 2 варианта

  1. использовать чистый нативный способ от Apple, который подразумевает использование libcompression
    https://developer.apple.com/documentation/compression/data_compression
  2. использовать библиотеку, которая построена на этом, дабы было проще работать
    https://github.com/weichsel/ZIPFoundation

#3

Да, погуглил эту тему. Нашел реализацию нативного способа https://gist.github.com/zadr/c664e61e29bea1b7e3a23e88c5ea74cc


#4

В общем, остановился на этой версии https://github.com/mw99/DataCompression (сам код здесь https://github.com/mw99/DataCompression/blob/master/Sources/DataCompression.swift), т.к. компактна и без ошибок компилируется все. Однако, что-то я все-таки делаю не так.

let zip = try? Data(contentsOf: "/.../test.zip")
    
let tmp: Data? = zip?.unzip()
    
let txt: String? = String(data: zip!, encoding: .utf8)

И в результате ничего не получаю.


#5

Каким образом можно выделить внутри zip файла блоки в виде других файлов (например в zip хранится один txt, данные которого нужно скопировать в String)?


#6

Я бы не парился и использовал бы библиотеку ZIPFoundation, она маленькая, простая и будет намного проще работать.


#7

Не хотелось бы добавлять ненужный функционал, да и вообще стороннее не очень люблю. Нужно то всего-лишь взять txt из zip при использовании вышеуказанного DataCompression.swift, в котором ничего лишнего я не увидел. Может просто у кого-либо уже есть опыт подобного?