Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p><a href="http://www.winimage.com/zLibDll/minizip.html" rel="noreferrer">Minizip</a> does have an example programs to demonstrate its usage - the files are called minizip.c and miniunz.c. </p> <p>Update: I had a few minutes so I whipped up this quick, bare bones example for you. It's very smelly C, and I wouldn't use it without major improvements. Hopefully it's enough to get you going for now.</p> <pre><code>// uzip.c - Simple example of using the minizip API. // Do not use this code as is! It is educational only, and probably // riddled with errors and leaks! #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include "unzip.h" #define dir_delimter '/' #define MAX_FILENAME 512 #define READ_SIZE 8192 int main( int argc, char **argv ) { if ( argc &lt; 2 ) { printf( "usage:\n%s {file to unzip}\n", argv[ 0 ] ); return -1; } // Open the zip file unzFile *zipfile = unzOpen( argv[ 1 ] ); if ( zipfile == NULL ) { printf( "%s: not found\n" ); return -1; } // Get info about the zip file unz_global_info global_info; if ( unzGetGlobalInfo( zipfile, &amp;global_info ) != UNZ_OK ) { printf( "could not read file global info\n" ); unzClose( zipfile ); return -1; } // Buffer to hold data read from the zip file. char read_buffer[ READ_SIZE ]; // Loop to extract all files uLong i; for ( i = 0; i &lt; global_info.number_entry; ++i ) { // Get info about current file. unz_file_info file_info; char filename[ MAX_FILENAME ]; if ( unzGetCurrentFileInfo( zipfile, &amp;file_info, filename, MAX_FILENAME, NULL, 0, NULL, 0 ) != UNZ_OK ) { printf( "could not read file info\n" ); unzClose( zipfile ); return -1; } // Check if this entry is a directory or file. const size_t filename_length = strlen( filename ); if ( filename[ filename_length-1 ] == dir_delimter ) { // Entry is a directory, so create it. printf( "dir:%s\n", filename ); mkdir( filename ); } else { // Entry is a file, so extract it. printf( "file:%s\n", filename ); if ( unzOpenCurrentFile( zipfile ) != UNZ_OK ) { printf( "could not open file\n" ); unzClose( zipfile ); return -1; } // Open a file to write out the data. FILE *out = fopen( filename, "wb" ); if ( out == NULL ) { printf( "could not open destination file\n" ); unzCloseCurrentFile( zipfile ); unzClose( zipfile ); return -1; } int error = UNZ_OK; do { error = unzReadCurrentFile( zipfile, read_buffer, READ_SIZE ); if ( error &lt; 0 ) { printf( "error %d\n", error ); unzCloseCurrentFile( zipfile ); unzClose( zipfile ); return -1; } // Write data to file. if ( error &gt; 0 ) { fwrite( read_buffer, error, 1, out ); // You should check return of fwrite... } } while ( error &gt; 0 ); fclose( out ); } unzCloseCurrentFile( zipfile ); // Go the the next entry listed in the zip file. if ( ( i+1 ) &lt; global_info.number_entry ) { if ( unzGoToNextFile( zipfile ) != UNZ_OK ) { printf( "cound not read next file\n" ); unzClose( zipfile ); return -1; } } } unzClose( zipfile ); return 0; } </code></pre> <p>I built and tested it with MinGW/MSYS on Windows like this:</p> <pre><code>contrib/minizip/$ gcc -I../.. -o unzip uzip.c unzip.c ioapi.c ../../libz.a contrib/minizip/$ ./unzip.exe /j/zlib-125.zip </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload