Estoy tratando de archivar archivos para una aplicación multiplataforma, y parece que Minizip (basado en zlib) es tan portátil como los archivadores.¿Cómo uso Minizip (en Zlib)?
Cuando trato de ejecutar el siguiente código ficticio, sin embargo, me sale un error del sistema [my executable] has stopped working. Windows can check online for a solution to the problem.
Puede alguien ayudarme a ver cómo utilizar esta biblioteca? — (no hay documento o un tutorial en cualquier lugar que puedo encontrar)
zip_fileinfo zfi;
int main()
{
zipFile zf = zipOpen("myarch.zip",APPEND_STATUS_ADDINZIP);
int ret = zipOpenNewFileInZip(zf,
"myfile.txt",
&zfi,
NULL, 0,
NULL, 0,
"my comment for this interior file",
Z_DEFLATED,
Z_NO_COMPRESSION
);
zipCloseFileInZip(zf);
zipClose(zf, "my comment for exterior file");
return 0;
}
Especificaciones: Msys + MinGW, Windows 7, utilizando zlibwapi.dll de zlib125dll.zip/dll32
Esto es bueno. Sin embargo, algunos problemas: 1. Esto supone que todo el archivo puede caber en la memoria, lo cual es una vista simplista, pero tal vez lo suficientemente buena para esta muestra. 2. No hay ninguna razón por la cual un resultado de archivo de 0 longitud sea un error si la longitud inicial del archivo es 0. 3. Suponiendo que se trata de un error, no hay necesidad de la operación ternaria. es decir 'if (zipWriteInFileInZip (zf, size == 0?" ": & buffer [0], size))' se puede escribir como 'if (zipWriteInFileInZip (zf, & buffer [0], size))'. 4. Recomiendo no usar un prefijo de subrayado. Sé que estás usando una letra minúscula después de ella, pero ... * encoge de hombros * – Adrian
El segundo y el tercer punto que planteas son incorrectos. La comprobación de tamaño == 0 es para garantizar que el almacenamiento intermedio [0] no se ejecute en longitud cero. La operación lógica o de operación en la sentencia if asegura que los archivos de longitud cero se escriban correctamente en el archivo zip, y el ternario posterior es, una vez más, para garantizar que no se invoca el buffer [0] en la longitud cero. El código funciona correctamente y como se esperaba. – niemiro
Esto está etiquetado como C, no C++. –