iPhone: загрузка zip и распаковка в подкаталоге основного пакета во время выполнения - PullRequest
11 голосов
/ 22 марта 2011

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

Любые идеи, как разархивировать во время выполнения идоступ к изображениям?Был бы очень рад за какую-нибудь идею.

Привет,

Ответы [ 4 ]

20 голосов
/ 22 марта 2011

Я использовал ZipArchive с успехом в прошлом.

Это довольно легкий и простой в использовании, поддерживает защиту паролем, несколько файлов внутри ZIP, а также сжимать и распаковывать.

Основное использование:

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"ZipFileName" ofType:@"zip"];
ZipArchive *zipArchive = [[ZipArchive alloc] init];
[zipArchive UnzipOpenFile:filepath Password:@"xxxxxx"];
[zipArchive UnzipFileTo:{pathToDirectory} overWrite:YES];
[zipArchive UnzipCloseFile];
[zipArchive release];
9 голосов
/ 22 марта 2011

Вы не можете извлечь в свой пакет. Используйте [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0], чтобы получить путь к каталогу, в который вы можете записать.

Вы можете использовать код из http://code.google.com/p/ziparchive/ для извлечения файлов из zip-архива.

3 голосов
/ 06 марта 2012

Если вы добавите ZipArchive в свой проект, не забудьте также добавить фреймворк.Правильный каркас - libz.dylib. Последняя версия (Xcode 4.2): 1.2.5 .

(Добавьте фреймворк в раздел с библиотеками на вкладке фаз сборки вашей цели.)

2 голосов
/ 02 сентября 2013

Я предлагаю вам использовать ssziparchive bcoz, он поддерживает оба проекта ARC и Non ARC.

  1. Добавить SSZipArchive.h, SSZipArchive.m и minizipк вашему проекту.
  2. Добавьте последнюю версию библиотеки libz (сейчас это libz1.2.5) к вашей цели.

Вам не нужно ничего делать в отношении ARC.SSZipArchive обнаружит, если вы не используете ARC, и добавит необходимый код управления памятью.

И код будет таким:

    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    // Unzipping

    //If your zip is in document directory than use this code
    NSString *zipPath = [documentsDirectory stringByAppendingPathComponent:@"mediadata.zip"];
    //else if zip file is in bundle than use this code
    NSString *zipPath = [[NSBundle mainBundle] pathForResource:@"mediadata" ofType:@"zip"];

    NSString *destinationPath = [documentsDirectory stringByAppendingPathComponent:@"MediaData"];


    if( [SSZipArchive unzipFileAtPath:zipPath toDestination:destinationPath] != NO ) {
        //unzip data success
        //do something
        NSLog(@"Dilip Success");
    }else{
        NSLog(@"Dilip Error");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...