Minizip एक उदाहरण कार्यक्रमों इसके उपयोग का प्रदर्शन करना होता है - फ़ाइलें minizip.c कहा जाता है और miniunz.c।
अद्यतन: मेरे पास कुछ मिनट थे इसलिए मैंने आपके लिए यह त्वरित, नंगे हड्डियों का उदाहरण छीन लिया। यह बहुत सुगंधित सी है, और मैं बिना किसी बड़े सुधार के इसका उपयोग नहीं करूंगा। उम्मीद है कि अब आप जा रहे हैं।
// 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 <stdio.h>
#include <string.h>
#include "unzip.h"
#define dir_delimter '/'
#define MAX_FILENAME 512
#define READ_SIZE 8192
int main(int argc, char **argv)
{
if (argc < 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, &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 < global_info.number_entry; ++i)
{
// Get info about current file.
unz_file_info file_info;
char filename[ MAX_FILENAME ];
if (unzGetCurrentFileInfo(
zipfile,
&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 < 0)
{
printf("error %d\n", error);
unzCloseCurrentFile(zipfile);
unzClose(zipfile);
return -1;
}
// Write data to file.
if (error > 0)
{
fwrite(read_buffer, error, 1, out); // You should check return of fwrite...
}
} while (error > 0);
fclose(out);
}
unzCloseCurrentFile(zipfile);
// Go the the next entry listed in the zip file.
if ((i+1) < global_info.number_entry)
{
if (unzGoToNextFile(zipfile) != UNZ_OK)
{
printf("cound not read next file\n");
unzClose(zipfile);
return -1;
}
}
}
unzClose(zipfile);
return 0;
}
मैं बनाया गया है और इस तरह विंडोज पर MinGW/MSYS के साथ यह परीक्षण किया:
contrib/minizip/$ gcc -I../.. -o unzip uzip.c unzip.c ioapi.c ../../libz.a
contrib/minizip/$ ./unzip.exe /j/zlib-125.zip
स्रोत
2012-05-03 22:38:30
पाठकों के लिए कैसे विपरीत करने के लिए की तलाश में - zlib का उपयोग कर एक ज़िप फ़ाइल बनाने में, मेरा उत्तर यहाँ देखें: http://stackoverflow.com/questions/11370908/how-do-i-use-minizip-on-zlib – niemiro