2011-03-22 7 views
11

Quiero extender mi aplicación iPhone que la aplicación descarga un archivo zip en un subdirectorio luego lo extrae y luego carga las imágenes que estaban dentro del zip.iPhone: descargar zip y extraer en subdirectorio paquete principal en tiempo de ejecución

¿Alguna idea de cómo descomprimir en tiempo de ejecución y acceder a las imágenes? Sería realmente feliz por alguna idea.

Saludos,

+0

haz principal está. No puede extraer un archivo, sin embargo, puede usar un directorio local como el directorio de documentos. –

Respuesta

9

No puede extraer en su paquete. Use [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] para obtener la ruta a un directorio en el que puede escribir.

Puede usar el código de http://code.google.com/p/ziparchive/ para extraer archivos del archivo zip.

+0

puedo usar Ziparchive para iOS 6 –

20

He usado ZipArchive con éxito en el pasado.

Es bastante ligero y fácil de usar, admite protección con contraseña, varios archivos dentro de un ZIP, así como comprimir & descomprimir.

El uso básico es:

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]; 
+0

cómo comprobar si el archivo está protegido con contraseña o no, admite – AMH

+1

Esto se basa en obj C++, puedo obtener la versión Obj C para no tener que usar OBJ C++ ¿compilador? – Satyam

+0

@Rog ¿Puedo usar ZipArchive para iOS 6 –

3

Si agrega ZipArchive a su proyecto, recuerde que añadir también el marco. El marco correcto es libz.dylib. La última versión (Xcode 4.2) es 1.2.5.

(Añadir marco a la sección con las bibliotecas en la pestaña fases de construcción de su objetivo.)

2

Sugiero que usted utilice ssziparchive bcoz que soporta tanto proyecto ARC y Non ARC.

  1. Añadir SSZipArchive.h, SSZipArchive.m y minizip a su proyecto.
  2. Agregue la última versión de la biblioteca libz (en este momento es libz1.2.5) a su destino.

No necesita hacer nada con respecto a ARC. SSZipArchive detectará si no está usando ARC y agrega el código de administración de memoria requerido.

Y código será la siguiente: de sólo lectura

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"); 
    } 
+0

Buena respuesta realmente útil, gracias +1 –

+0

Si el archivo ".zip" en el servidor, cómo usar la biblioteca SSZipArchive.Por favor, háganos saber –

+0

@JoshKethepalli en este caso, primero tiene que descargar el archivo ZIP en el local y luego extraerlo. Sin el archivo ZIP original en el almacenamiento local, no hay forma de que pueda extraerlo. – Dilip

Cuestiones relacionadas