Ich muss eine .epub-Datei in Swift entpacken, um die Daten vollständig zu lesen. Ich kann die Ausgabe eines ePubs parsen, wenn ich es bekomme (ich habe ein funktionierendes Beispiel in Python geschrieben), aber SSZipArchive wird offenbar keine .epubs entpacken. Es funktioniert jedoch gut für eine Dummy-ZIP-Datei; nur .epub ist ein Problem. Soweit ich das beurteilen kann, gab es keine Frage zu stellen, wie man dies von Hand auf S.O. darüber hinaus, Leute einfach auf Projekte zu verweisen, die das für Sie in objective-c tun, mit viel Overhead (was ich nicht verstehe oder brauche), das den Zweck dessen, was ich tun muss, zunichte macht. Unten ist mein aktueller Versuch. Beachten Sie, dass der fragliche epub unter dem folgenden Link (Projekt Gutenberg) http://www.gutenberg.org/ebooks/158.epub.noimages gefunden werden kann und dass, wenn ich das ausführe, die print-Anweisung "true, true, true, false" ausgibt (dh die Dateien und Pfade existieren alle, aber wird entpacken nicht):Unpacking 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
unten in python geschrieben Konzept Code Beweis, in dem ich die gleiche epub bekommen als Zip-Datei erkannt werden und deren Behälterinhalt gelesen :
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