Мне нужно разархивировать файл .epub в swift, чтобы полностью прочитать данные. Я знаю, как анализировать вывод ePub, если я могу его получить (я написал рабочий пример в python), но SSZipArchive, по-видимому, не будет распаковывать .epubs. Тем не менее, он отлично работает с манекеном .zip-файл; только .epub - проблема. Насколько я могу судить, не возникало вопросов о том, как на самом деле это сделать вручную на С.О. помимо простого указания людей проектам, которые делают это для вас в объективном c с большим количеством накладных расходов (которые я не понимаю или не нуждаюсь), что побеждает цель того, что мне нужно делать. Ниже моя текущая попытка. Обратите внимание, что рассматриваемый epub можно найти по следующей ссылке (проект gutenberg) http://www.gutenberg.org/ebooks/158.epub.noimages и что при запуске этого утверждения print испускает: «true, true, true, false» (то есть файлы и пути все существуют, но не разархивировать):Unzipping Epub in swift
import Foundation
class EpubExtractor: NSObject, SSZipArchiveDelegate {
init(fileName: String) {
fName = fileName
}
func getEpubInfo() {
var paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let documentsDir = paths[0]
let zipPath = documentsDir.stringByAppendingString("/MyZipFiles") // My folder name in document directory
let fileManager = NSFileManager.defaultManager()
let success1 = fileManager.fileExistsAtPath(zipPath) as Bool
if success1 == false {
print("no directory")
do {
try! fileManager.createDirectoryAtPath(zipPath, withIntermediateDirectories: true, attributes: nil)
}
}
let archivePath = zipPath.stringByAppendingString("/emma.epub") // Sample folder is going to zip with name Demo.zip
let success2 = fileManager.fileExistsAtPath(archivePath) as Bool
let destPath = zipPath.stringByAppendingString("/Hello")
let success3 = fileManager.fileExistsAtPath(destPath) as Bool
let worked = SSZipArchive.unzipFileAtPath(archivePath, toDestination: destPath, delegate:self)
print(success1, success2, success3, worked)
}
}
EDIT
Ниже доказательство концепции код, написанный на Python, в котором я могу получить тот же EPUB, чтобы быть признанным в качестве почтового файла и прочитать его содержимое контейнера :
import zipfile
dir = "sampleData/epubs/"
fileName = "emma.epub"
print zipfile.is_zipfile(dir+fileName) # Check whether file is zip (this returns true, though in swift it fails)
zip = zipfile.ZipFile(dir+fileName)
txt = zip.read('META-INF/container.xml') # Print contents of container (this is what I need swift to be able to do)
print txt # This successfully prints the container content text