Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo descomprimir un paquete comprimido zip en Qt

Cómo descomprimir un paquete comprimido zip en Qt

Qt llama al método de descompresión zlib/**

*Valor de retorno: la ruta absoluta del archivo descomprimido se guardará en QStringList

*

*Parámetro: FileName es la ruta absoluta del archivo comprimido a descomprimir, que en realidad es una QStringList, es decir, el tipo QList?QList?list se utiliza para guardar la ruta de cada archivo después de la descompresión

*

*Función: descomprime el archivo comprimido especificado y guarda la ruta absoluta del archivo descomprimido en la lista

**/void?WidgetSmallClass ::slot_ UncompressedFile (?QString?FileName?QStringList?&?ListPic?)

{

/**Crear una nueva carpeta para guardar los archivos descomprimidos*/

QString ?UnpressPath?=?FileName.remove(?.zip"?);

QDir?dir;

dir.mkpath(?UnpressPath?

unz_file_info64?FileInfo;

/** Abra el archivo zip, recuerde agregar ".zip" aquí porque el archivo ".zip" ya está arriba. .zip "ha sido movido.

*/

unzFile?zFile?=?unzOpen64(? (?FileName?+?" .zip"?) .toStdString().c_str()?) ;

unz_global_info64? gi;

/**** Obtener el número de archivos**/

if?unzGetGlobalInfo64(?zFile,?&gi?)?==?UNZ_OK?)

{

int?resultado;

para?(?int?i?=?0;?i?

{

char?file[256]? =?{?0?};

char?ext[256]=?{?0?} ;

char?com[1024]? =?{?0?};

if(?unzGetCurrentFileInfo64(?zFile,? &FileInfo,?file,?sizeof(archivo), ?ext ,?256,?com,?1024?)?=?UNZ_OK?)

{

;

}

if(?! (?FileInfo.external_fa?&?FILE_ATTRIBUTE_DIRECTORY?)?) ?//archivo, de lo contrario directorio

{

result=unzOpenCurrentFile(zFile);//sin contraseña

result=unzOpenCurrentFilePassword(zFile, "szPassword");//con contraseña

}

char?data[1024] =? {? 0?};

int?size;

/**Escribir ruta a la lista**

QString?path?=?UnpressPath?+? QString ?("/")?+?file;

ListPic?<

QFile?File(?path?);

Archivo open(?QFile::WriteOnly?);

/**** Abre un nuevo archivo y escribe datos en él**

while(true)

{

tamaño=?unzReadCurrentFile(zFile,data,sizeof(data));

if(tamaño?<=?0)?{

si (¿tamaño?<=?0)?

Archivo.write(datos,?tamaño);

}

Archivo.close();

unzCloseCurrentFile(zFile);

if(?i?

}

unzClose(zFile);

}

else { return }

}