IPhone: загрузка zip и извлечение из основного подкаталога пакета во время выполнения
Я хочу расширить приложение для iPhone, которое приложение загружает zip файл в
вспомогательный каталог затем извлекает его, а затем загружает изображения, которые были внутри zip.
Любые идеи по распаковке во время выполнения и доступу к изображениям? Был бы действительно рад за какую-то идею.
Привет,
Ответы
Ответ 1
Я использовал 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];
Ответ 2
Вы не можете извлечь из своего пакета. Используйте [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
, чтобы получить путь к каталогу, в который вы можете записать.
Вы можете использовать код http://code.google.com/p/ziparchive/ для извлечения файлов из архива zip.
Ответ 3
Если вы добавите ZipArchive
в свой проект, не забудьте также добавить фреймворк.
Правильная структура libz.dylib
. Последняя версия (Xcode 4.2) - 1.2.5.
(Добавьте фреймворк в раздел с библиотеками на вкладке фаз сборки вашей цели.)
Ответ 4
Я предлагаю вам использовать ssziparchive bcoz, он поддерживает проекты ARC
и Non ARC
.
- Добавьте
SSZipArchive.h
, SSZipArchive.m
и minizip
в свой проект.
- Добавьте в свою версию последнюю версию библиотеки
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");
}