4

我正在尝试使用 SSZipArchive 框架解压缩文件。

let unzipper = SSZipArchive.unzipFileAtPath(String(document), toDestination: String(documentsUrl))

这就是我目前正在尝试解压缩文件的方法,这是文件的路径:

unzipFileAtPath - Document at path: file:///private/var/mobile/Containers/Data/Application/94ADDB12-78A2-4798-856D-0626C41B7AC2/Documents/tSOUTrIayb.zip false

我正在尝试将其解压缩到此路径:

NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!

不幸的是,它似乎不起作用,每次都没有新内容保存到我正在打印的文档目录中。我还打印了仅打印的 'unzipper' 变量false,无论这意味着什么。

我找不到该框架的任何文档,所以我不完全确定如何使它工作

4

3 回答 3

7
于 2015-11-17T05:13:25.280 回答
1

TLDR;检查您的源路径和目标路径是否不以file://前缀开头。

更多详情...

我遇到了同样的问题,SSZipArchive 会运行,success变量会打印出 false,没有调用委托,也没有从 SSZipArchive 打印调试消息。

我是这样运行的:

let sourcePath = sourceURL.absoluteString
let destPath = destURL.absoluteString

print("Source: \(sourcePath)")
print("Dest: \(destPath)")

let success = SSZipArchive.unzipFile(atPath: sourcePath, toDestination: destPath, delegate: self)
print("ZipArchive - Success: \(success)")

我的日志语句正在打印出来

Source: file:///var/containers/Bundle/Application/longAppIDHere/testApp.app/Bundle1.zip
Dest: file:///var/mobile/Containers/Data/Application/longAppIDHere/Library/Application Support/testFolder/
ZipArchive - Success: false

我将路径构造函数更改为:

let sourcePath = sourceURL.relativePath
let destPath = destURL.relativePath

现在 SSZipArchive 工作正常。

于 2018-08-06T21:48:00.607 回答
1

我希望这可以帮助别人。 AEXMLSwiftyXMLParser , SSZipArchive

 //путь к файлу // path to file
    guard let bookPath = Bundle.main.path(forResource: "FileName", ofType: "epub") else {  return }
    //путь к хранилищу телефона // path to storage 
    let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
    let fileManager = FileManager.default
    let bookName = bookPath.lastPathComponent // название файла // name of file
    let bookBasePath = paths.appendingPathComponent(bookName) // ссылка к хранилищу телефона // path to Directory 

    do {
        if !fileManager.fileExists(atPath: bookBasePath) {
            SSZipArchive.createZipFile(atPath: bookPath, withContentsOfDirectory:bookBasePath) // создание архива // create zip
            SSZipArchive.unzipFile(atPath: bookPath, toDestination: bookBasePath, delegate: self) // распаковка архива // unzip 
            try FileManager.default.createDirectory(atPath: bookBasePath, withIntermediateDirectories: true, attributes: nil) // создание директории с архивом // create Directory
        }

        if fileManager.fileExists(atPath: bookBasePath){
            // get xml
            let containerPath = "META-INF/container.xml"
            let containerData = try Data(contentsOf: URL(fileURLWithPath: bookBasePath).appendingPathComponent(containerPath), options: .alwaysMapped) // получение xml файла из директории
            print(containerData)
           // parse xml ...
        } else {
            print("file no exists")
        }
    } catch {
        print(error)
    }
于 2019-09-02T15:00:45.557 回答