Swift: разархивировать файл - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь получить String из txt-файла внутри zip-файла, используя собственную библиотеку libcompression. На самом деле я использую код от

Сначала я делал:

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

Но как мне получить содержимое zip-файла и как получить данные из определенного текстового файла?

1 Ответ

0 голосов
/ 28 июня 2018

ZIP Foundation поддерживает доступ к отдельным записям в ZIP-архивах.
Вы должны инициализировать архив, передав URL-адрес файла инициализатору Archive.
После этого вы можете получить доступ к определенной записи по подписке:

let fileManager = FileManager()
let currentWorkingPath = fileManager.currentDirectoryPath
var archiveURL = URL(fileURLWithPath: currentWorkingPath)
archiveURL.appendPathComponent("test.zip")
guard let archive = Archive(url: archiveURL, accessMode: .read) else  {
    return
}
guard let entry = archive["file.txt"] else {
    return
}
var destinationURL = URL(fileURLWithPath: currentWorkingPath)
destinationURL.appendPathComponent("out.txt")
do {
    try archive.extract(entry, to: destinationURL)
} catch {
    print("Extracting entry from archive failed with error:\(error)")
}

Вы также можете напрямую получить доступ к содержимому entry с помощью API на основе замыкания. Это позволяет обрабатывать запись без предварительной записи в файловую систему:

try archive.extract(entry, consumer: { (data) in
    print(data.count)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...