2014-10-05 4 views
2

Я новичок в SWIFT, и я только начал внедрять свое первое приложение для OS X. Я создал простой проект и решил, что Ill рассмотрит различные структуры для использования файлов zip/rar. Я начал с ZipArchive, как рекомендовал, но не смог заставить его работать в моем проекте - даже не компилировал (возможно, что-то не так с моей настройкой), у меня был аналогичный опыт с Objective-Zip и SSZipArchive. Наконец, я наткнулся на фреймворк zip zap, который идеально подходит для моего проекта.Zip/Rar файлы с SWIFT

Я посмотрел в примерах:

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]); 

, но я не мог заставить его работать с СВИФТ. Проблема, с которой я столкнулся, заключается в том, что я не мог создать NSURL, который работал с ZZArchive.

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

привел к

fatal error: unexpectedly found nil while unwrapping an Optional value

и все остальное я попытался либо не компилировать с разворачиванием ошибки или скомпилирован, но на исполнении привел к этой ошибке.

Может кто-нибудь попросит меня решить мою проблему с распаковкой или привести меня к решению о том, как быстро и быстро распаковывать/читать файлы zip/rar/cbr со скоростью.

+0

Не уверен, что NSURL любит эти '..' ы на пути. –

+0

О, извините, я не уточнил - «..» заменяет полный путь, который я использую – Sparksmith

ответ

2

Это должно исправить

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

Вот реализация zzzip в быстрой

//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) 

Это работает для небольших текстовых файлов и изображений. он имеет свои ограничения из-за отсутствия проверки ошибок и только записи первого архивного ввода в файл. Если какие-либо пути неправильны, вы закончите с ошибками, как только попробуете и скомпилируете.

+0

Спасибо, это исправило его, но в конце концов я решил, что, вероятно, быстро все еще недостаточно зрело для приложений большего масштаба. Большое спасибо за удивительный ответ :) – Sparksmith

Смежные вопросы