Sto cercando di archiviare i file per un'applicazione multipiattaforma, e sembra che Minizip (costruito su zlib) sia portatile quanto gli archivisti.Come utilizzare Minizip (su Zlib)?
Quando provo ad eseguire il seguente codice fittizio, però, ho un errore di sistema [my executable] has stopped working. Windows can check online for a solution to the problem.
qualcuno mi può aiutare a vedere come utilizzare questa libreria? — (non c'è doc o tutorial da nessuna parte che posso trovare)
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;
}
Spec: Msys + MinGW, Windows 7, utilizzando zlibwapi.dll da zlib125dll.zip/dll32
Questo è buono. Alcuni problemi però: 1. Ciò presuppone che l'intero file possa essere contenuto nella memoria, il che è in qualche modo una visione semplicistica, ma forse abbastanza buono per questo esempio. 2. Non c'è motivo per cui un output di file di lunghezza 0 è un errore se la lunghezza del file iniziale è 0. 3. Supponendo che si tratti di un errore, non è necessario eseguire l'operazione ternaria. Ad esempio, se (zipWriteInFileInZip (zf, size == 0? "": & buffer [0], size)) 'può essere scritto come' if (zipWriteInFileInZip (zf, & buffer [0], size)) '. 4. Consiglierei di non utilizzare un prefisso di sottolineatura. So che stai usando una lettera minuscola dopo di essa, ma ... * scrollando le spalle * – Adrian
Il secondo e il terzo punto che hai sollevato sono sbagliati. La dimensione == 0 controllo serve a garantire che il buffer [0] non venga eseguito su lunghezza zero. La logica o l'operazione nell'istruzione if assicura quindi che i file di lunghezza zero vengano scritti correttamente nel file zip e che il ternario successivo sia, ancora una volta, per garantire che il buffer [0] non venga chiamato sulla lunghezza zero. Il codice funziona correttamente e come previsto. – niemiro
Questo è etichettato come C, non C++. –