#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=mini lib=-lminizip -laes -lz libpath=-L/usr/local/lib incpath=-I/usr/local/include ${target}: g++ main.cpp -g -o $@ ${lib} ${libpath} ${incpath} clean: -rm ${target}10年积累的网站设计制作、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有南乐免费网站建设让你可以放心的选择与我们合作。另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章标题:minizipc++压缩文件及文件夹-创新互联
新闻来源:http://cdxtjz.cn/article/edhpc.html