minizip c++ 压缩文件及文件夹
发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,#include #include #include #include #include #include #include #include #include #include #include "
#include#include #include #include #include #include #include #include #include #include #include "minizip/zip.h"#include "minizip/unzip.h"using namespace std;void EnumDirFiles(const string& dirPrefix,const string& dirName,vector & vFiles){ if (dirPrefix.empty() || dirName.empty()) return; string dirNameTmp = dirName; string dirPre = dirPrefix; if (dirNameTmp.find_last_of("/") != dirNameTmp.length() - 1) dirNameTmp += "/"; if (dirNameTmp[0] == '/') dirNameTmp = dirNameTmp.substr(1); if (dirPre.find_last_of("/") != dirPre.length() - 1) dirPre += "/"; string path; path = dirPre + dirNameTmp; struct stat fileStat; DIR* pDir = opendir(path.c_str()); if (!pDir) return; struct dirent* pDirEnt = NULL; while ( (pDirEnt = readdir(pDir)) != NULL ) { if (strcmp(pDirEnt->d_name,".") == 0 || strcmp(pDirEnt->d_name,"..") == 0) continue; string tmpDir = dirPre + dirNameTmp + pDirEnt->d_name; if (stat(tmpDir.c_str(),&fileStat) != 0) continue; string innerDir = dirNameTmp + pDirEnt->d_name; if (fileStat.st_mode & S_IFDIR == S_IFDIR) { EnumDirFiles(dirPrefix,innerDir,vFiles); continue; } vFiles.push_back(innerDir); } if (pDir) closedir(pDir);}int writeInZipFile(zipFile zFile,const string& file){ fstream f(file.c_str(),std::ios::binary | std::ios::in); f.seekg(0, std::ios::end); long size = f.tellg(); f.seekg(0, std::ios::beg); if ( size <= 0 ) { return zipWriteInFileInZip(zFile,NULL,0); } char* buf = new char[size]; f.read(buf,size); int ret = zipWriteInFileInZip(zFile,buf,size); delete[] buf; return ret;}int main(int argc, char *argv[]){ if (argc < 3) { cout<<"usage: mini from to"< vFiles; EnumDirFiles(dirPrefix,dirName,vFiles); vector ::iterator itF = vFiles.begin(); for(;itF != vFiles.end(); ++itF) { zip_fileinfo zFileInfo = { 0 }; int ret = zipOpenNewFileInZip(zFile,itF->c_str(),&zFileInfo,NULL,0,NULL,0,NULL,0,Z_DEFAULT_COMPRESSION); if (ret != ZIP_OK) { cout<<"openfile in zip failed"< target=minilib=-lminizip -laes -lz libpath=-L/usr/local/libincpath=-I/usr/local/include${target}: g++ main.cpp -g -o $@ ${lib} ${libpath} ${incpath}clean: -rm ${target}