#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}
本文题目:minizipc++压缩文件及文件夹
标题来源:http://cdiso.cn/article/ihhigs.html