2016-04-15 12 views
0

私はデータを完全に読むために迅速に.epubファイルを解凍する必要があります。私はそれを得ることができればePubの出力を解析する方法を知っています(私はPythonで実際の例を書いています)が、SSZipArchiveは明らかに.epubsを解凍しません。ただし、ダミーの.zipファイルで正常に動作します。 .epubだけが問題です。私が知る限りでは、実際にこれを手作業で行う方法はないのです。単に私がやりたいことの目的を破るオーバーヘッド(私が理解していない、または必要としない)を多用して、客観的にあなたのためにそれを行うプロジェクトに人々を指し示すだけではありません。以下は私の現在の試みです。問題のepubは次のリンク(project gutenberg)http://www.gutenberg.org/ebooks/158.epub.noimagesにあります。これを実行すると、print文は "true、true、true、false"(つまり、ファイルとパスはすべて存在しますが、以下速報でEpubを解凍

は、私は非常に同じEPUBを得ることが可能なPythonで書かれた概念実証コードは、zipファイルとして認識されるようにされて

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とそのコンテナの内容をお読みください。)解凍しません:

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 

答えて

3

私は何時間も読んだ後にそれを理解しました。ソリューションが非常にシンプルであることがわかります。

"fileName.epub"ファイルの名前を "fileName.zip"に変更する必要があります。それでおしまい!

SSZipArchiveまたはZipのいずれかが、ファイルを "fileName"というフォルダ内のMETA-Inf、mimetype、およびOEBPSファイル(少なくともデフォルト名)に解凍します。

これは、これを苦労している人に役立ちます。もちろんこれを行う別の方法がある場合は、私にコメントでお知らせください。