Ho iniziato a utilizzare zlib 1.2.5 e non vedo alcuna routine da estrarre da un file zip? Ho letto di un'applicazione minizip, parte della distribuzione.zlib C++ ed estrazione di file
È così che dovrebbe essere fatto?
Ho iniziato a utilizzare zlib 1.2.5 e non vedo alcuna routine da estrarre da un file zip? Ho letto di un'applicazione minizip, parte della distribuzione.zlib C++ ed estrazione di file
È così che dovrebbe essere fatto?
Sì, lo fa bene. (Ma se mai non ti piace il codice C, si dovrebbe guardare a 7-zip SDK che dispone di codice in C++ e C#.)
unzip.h
zip.h
(guardare contrib\minizip\unzip.h e contrib\minizip\zip.h)
ad esempio la decompressione: le unzOpen()
funzioni del vostro file zip restituisce un unzFile
quindi utilizzare unzGoToFirstFile()
e unzGoToNextFile()
su questo unzFile
per sfogliare tutti i file nell'archivio.
poi si ottiene informazioni file per ogni file con unzGetCurrentFileInfo()
, vale a dire per le sue dimensioni,
sicuramente si dovrebbe chiamare unzOpenCurrentFile()
ad un certo momento.
e chiamare unzReadCurrentFile()
utilizzando la dimensione da fileinfo, recuperando il contenuto binario del file archiviato.
optionnally, v'è una struttura opaca è possibile fornire in modo da utilizzare la propria funzione di I/O, ma ovviamente c'è un'implementazione Win32 predefinito per l'accesso ai file, quindi si potrebbe anche non preoccuparsi di questo.
PS: e non dimenticate di chiamare unzCloseCurrentFile()
Da: http://www.zlib.net/zlib_faq.html#faq11: 11. Può zlib gestire gli archivi .zip?
Non da solo, no. Vedi la directory contrib/minizip nella distribuzione zlib.
Non esiste un tutorial ma il minizip zip.c source è esattamente per IO (quindi presumibilmente compressione e decompressione) sui file zip usando zlib.
E ancora nessun tutorial MA http://www.winimage.com/zLibDll/minizip.html fornisce ulteriori dettagli.
ho costruito un wrapper Minizip l'aggiunta di alcune caratteristiche che mi servivano e che lo rende più bello usarlo. È fa uso l'ultima C++ 11 e si sviluppa utilizzando Visual Studio 2013 (dovrebbe essere portatile, ma non ho ancora testato su Unix)
C'è una descrizione completa qui: https://github.com/sebastiandev/zipper
è possibile zip intera cartelle, flussi, vettori, ecc. Inoltre, una bella funzionalità sta facendo tutto interamente in memoria.
È possibile sostituire gli elementi in una cartella zip con il wrapper? Ho un caso in cui ho bisogno di estrarre un file da un zip, apportare alcune modifiche e scriverlo nuovamente al zip (sovrascrivendo quello che c'è ora) senza sovrascrivere l'intero file zip. Sembra che potrei usare prima la classe unzipper per estrarre e modificare il file e quindi usare la funzione add nella classe zipper con lo stesso nome per sovrascriverla. – Wes
minizip non ha quella funzionalità, nemmeno elimina dallo zip. Penso che lo standard zip dia la possibilità di farlo, ma prima dovrebbe essere implementato su minizip e aggiunto successivamente a questi wrapper. Questo era più focalizzato sulla compressione dei dati, specialmente nella memoria per l'uso interno di app dove il semplice compresion era l'obiettivo, ma non realmente orientato o destinato a essere usato per modificare e modificare le cerniere. – Sebastian
Ok, ho trovato le funzioni e sto usando miniunzip per testare. Ho creato un file c: \ a.zip con 7zip. Contiene un file.Corro miniunzip -x c: \ a.zip -d c: \ reza e unzOpen2_64 fallisce. Sto facendo funzionare questo su Windows. Qualche idea sul perché questo è il caso? – reza
Questi collegamenti sono morti. – kberson
@kberson thx per l'osservazione. Ho aggiornato i collegamenti per puntare a https://github.com/madler/zlib/blob/master/contrib/minizip –