为了后续的方便操作zip文件, 将所有的操作封装成了一个动态库了。
/*** \description 从压缩包文件中解压出指定的文件到指定的目录.* \author sunsz* \date 2023/09/09**/
LIBZIP_API int UnpackFile(const char* password, char zipfilename[], char filename_to_extract[], char filepath_to_extract[]);/*** \description .从压缩包文件中读出指定的文件到buffer中.* * \author sunsz* \date 2023/09/09 * */
LIBZIP_API int UnpackBuffer(const char* password, char zipfilename[],char filenameinzip[], char *buffer,unsigned int *buffer_size);/*** \description 获取指定文件的大小.* * \author sunsz* \date 2023/09/09 * */
LIBZIP_API int UnpackBufferSize(const char* password, char zipfilename[], char filenameinzip[]);/*** \description 从压缩包中获取文件列表.* * \author sunsz* \date 2023/09/09 * */
LIBZIP_API int UnpackFileList(const char* password, char zipfilename[], char filename_list[256][256]);/*** \description 将指定的文件写入到压缩包文件中.* opt_overwrite = 0 重新新建文件 opt_overwrite = 2 以追加的方式添加到压缩包不存在则创建 * \author sunsz* \date 2023/09/09 * */
LIBZIP_API int PackFile(const char* password,char m_zipname[],char filein[],int opt_overwrite);/*** \description 将内容以指定的文件名称存入到压缩包文件中.* opt_overwrite = 0 重新新建文件 opt_overwrite = 2 以追加的方式添加到压缩包不存在则创建* \author sunsz* \date 2023/09/09**/
LIBZIP_API int PackBuffer(const char* password, char m_zipname[], char filenameinzip[], char* buffer, unsigned int buffer_size, int opt_overwrite);
示例代码:
//依赖头文件
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <exception>//定义函数指针//typedef int(WINAPI*S_dll_callback_demo1)(unsigned char*,unsigned char*);
typedef int(WINAPI*ZipRead)(const char*, char*, char*, char*);
typedef int(WINAPI*ZipReadFileList)(const char*, char*, char**);
typedef int(WINAPI*ZipWrite)(const char*, char*, char*,int);
typedef int(WINAPI* ZipWriteBuffter)(const char* , char *, char*, char* , unsigned int , int );
typedef int(WINAPI* ZipReadBuffer)(const char* , char *, char *, char *, unsigned int* );
typedef int(WINAPI* ZipReadBufferSize)(const char* , char *, char *);
//定义API函数变量
static ZipWrite zipWriteFile;
static ZipRead zipReadFile;
static ZipReadFileList readList;
static ZipWriteBuffter zipWriteBuffter;
static ZipReadBuffer zipReadBuffter;
static ZipReadBufferSize zipReadBuffterSize;
int main(){int i = 0;int j = 0;int malloclen = 0;unsigned int len = 0;char* dataout = NULL;char* passwd = "123456";int filenum = 0;char filelist[256][256] = { 0x00 };char data[] = "hello zip!";char path[] = ".//libzip.dll";HMODULE hDll = LoadLibrary(path);if (hDll != NULL) {zipWriteFile = (ZipWrite)GetProcAddress(hDll, "PackFile");zipReadFile = (ZipRead)GetProcAddress(hDll, "UnpackFile");readList = (ZipReadFileList)GetProcAddress(hDll, "UnpackFileList");zipWriteBuffter = (ZipWriteBuffter)GetProcAddress(hDll, "PackBuffer");zipReadBuffter = (ZipReadBuffer)GetProcAddress(hDll, "UnpackBuffer");zipReadBuffterSize = (ZipReadBufferSize)GetProcAddress(hDll, "UnpackBufferSize");/*if (zipWriteFile) {zipWriteFile(passwd, "2.zip", "D:\\D-Pro\\Test\\test_zip\\test_zip\\test.S19",0);}else {printf("\nZipWriteFile\n");}if (zipReadFile) {zipReadFile(passwd, "2.zip", "test.S19",".//test//11111.s19");}else {printf("\nZipReadFile\n");}*/if (zipWriteBuffter) {zipWriteBuffter(passwd, "3.zip", "11112.txt", data, sizeof(data), 2);}else {printf("\nzipWriteBuffter \n");}if (zipReadBuffter) {if (zipReadBuffterSize) {malloclen = zipReadBuffterSize(passwd, "3.zip", "11112.txt");if (malloclen) {dataout = (char*)malloc(malloclen + 8);zipReadBuffter(passwd, "3.zip", "11112.txt", dataout, &len);printf("%s\n", dataout);if (dataout != NULL) {free(dataout);dataout = NULL;}}}}else {printf("\nzipWriteBuffter \n");}}else{printf("\n加载失败!\n");}printf("\n请按任意键结束!\n");_getch();return 0;
}
示例测试: