2

我是 SWIFT 的新手,刚开始为 OS X 实现我的第一个应用程序。我创建了一个简单的项目,并决定研究使用 zip/rar 文件的不同框架。我按照建议从 ZipArchive 开始,但无法使其在我的项目中工作 - 甚至没有编译(可能我的设置有问题),我在 Objective-Zip 和 SSZipArchive 方面有类似的经验。最后,我偶然发现了完美地附加到我的项目的框架zip zap 。

我研究了这些例子:

ZZArchive* oldArchive = [ZZArchive archiveWithURL:[NSURL fileURLWithPath:@"/tmp/old.zip"] error:nil];
ZZArchiveEntry* firstArchiveEntry = oldArchive.entries[0];
NSLog(@"The first entry's uncompressed size is %lu bytes.", (unsigned long)firstArchiveEntry.uncompressedSize);
NSLog(@"The first entry's data is: %@.", [firstArchiveEntry newDataWithError:nil]);

但我无法让它与 SWIFT 一起工作。我面临的问题是我无法创建与 ZZArchive 一起使用的 NSURL。

let zip:ZZArchive = ZZArchive(NSURL(fileURLWithPath:"/Users/../tesData/test.zip"))

导致

致命错误:在展开可选值时意外发现 nil

我尝试的所有其他内容要么没有编译并出现解包错误,要么编译但在执行时导致了这个错误。

有人可以帮我解决我的解压缩问题,或者引导我找到如何使用 swift 压缩/解压缩/读取 zip/rar/cbr 文件的解决方案。

4

1 回答 1

2

这应该解决它

var path = NSURL.fileURLWithPath("/Users/../tesData/test.zip")
var archive: ZZArchive = ZZArchive(URL:(fileURLWithPath:path!), error: &err)

这是 zzzip 在 swift 中的实现

    //Declare
    var err: NSError? = NSError()
    var path = NSURL.fileURLWithPath("/PathToZipFile/file.zip")
    var URL3 = NSURL.fileURLWithPath("/pathanywhereinsystemtosaveunzipedfolder/")
    var URL2 = NSURL.fileURLWithPath("/PathToUnzippedFile/file.xxx")
    var fileManager = NSFileManager.defaultManager() //1
    let archive: ZZArchive = ZZArchive(URL:(fileURLWithPath:path!), error: &err)//2-3

    //Create Folder
    fileManager.createDirectoryAtURL(URL3!, withIntermediateDirectories: true, attributes: nil, error: &err)

    //Write First entry of archive to file
    var k = archive.entries[0].newDataWithError(nil)
    k.writeToURL(URL2!, atomically: false)

这适用于小型文本文件和图像。由于没有错误检查并且仅将第一个存档条目写入文件,它确实有其局限性。如果任何路径错误,您将在尝试编译时立即以错误结束。

于 2014-10-26T00:38:15.400 回答