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
*
*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? ); p>
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 p>
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(); p >
unzCloseCurrentFile(zFile);
if(?i?
}
unzClose(zFile);
}
else { return }
}