bool zipfile_uncompress(const std::string &filename)
{
//打开压缩文件
int npos = filename.find_last_of("/");
if(npos == std::string::npos)
{
return false;
}
std::string storePath = filename.substr(0,npos + 1);
std::string path = cocos2d::CCFileUtils::sharedFileUtils()->getWritablePath() + filename;
unzFile uzf = cocos2d::unzOpen(path.c_str());
if(uzf == NULL)
{
return false;
}
cocos2d::unz_file_info fileInfo;
char szFileName[260] = {0};
int uzRv = cocos2d::unzGoToFirstFile(uzf);
while(uzRv == UNZ_OK)
{
if(cocos2d::unzGetCurrentFileInfo(uzf,&fileInfo,szFileName,sizeof(szFileName),NULL,0,NULL,0) == UNZ_OK)
{
if(cocos2d::unzOpenCurrentFile(uzf) != UNZ_OK)
{
break;
}
//读压缩包内的文件
void* chBuf = (char*)malloc(fileInfo.uncompressed_size + 1);
cocos2d::unzReadCurrentFile(uzf, chBuf, fileInfo.uncompressed_size);
path.clear();
path.append(cocos2d::CCFileUtils::sharedFileUtils()->getWritablePath());
path.append(storePath);
path.append(szFileName);
FILE * file = fopen(path.c_str(),"wb+");
if(file)
{
fwrite(chBuf,1,fileInfo.uncompressed_size,file);
}
fclose(file);
free(chBuf);
//关闭压缩包内文件句柄
if(cocos2d::unzCloseCurrentFile(uzf) != UNZ_OK)
{
break;
}
//枚举压缩包内下一个文件
uzRv = cocos2d::unzGoToNextFile(uzf);
}
else
{
break;
}
}
return true;
}
{
//打开压缩文件
int npos = filename.find_last_of("/");
if(npos == std::string::npos)
{
return false;
}
std::string storePath = filename.substr(0,npos + 1);
std::string path = cocos2d::CCFileUtils::sharedFileUtils()->getWritablePath() + filename;
unzFile uzf = cocos2d::unzOpen(path.c_str());
if(uzf == NULL)
{
return false;
}
cocos2d::unz_file_info fileInfo;
char szFileName[260] = {0};
int uzRv = cocos2d::unzGoToFirstFile(uzf);
while(uzRv == UNZ_OK)
{
if(cocos2d::unzGetCurrentFileInfo(uzf,&fileInfo,szFileName,sizeof(szFileName),NULL,0,NULL,0) == UNZ_OK)
{
if(cocos2d::unzOpenCurrentFile(uzf) != UNZ_OK)
{
break;
}
//读压缩包内的文件
void* chBuf = (char*)malloc(fileInfo.uncompressed_size + 1);
cocos2d::unzReadCurrentFile(uzf, chBuf, fileInfo.uncompressed_size);
path.clear();
path.append(cocos2d::CCFileUtils::sharedFileUtils()->getWritablePath());
path.append(storePath);
path.append(szFileName);
FILE * file = fopen(path.c_str(),"wb+");
if(file)
{
fwrite(chBuf,1,fileInfo.uncompressed_size,file);
}
fclose(file);
free(chBuf);
//关闭压缩包内文件句柄
if(cocos2d::unzCloseCurrentFile(uzf) != UNZ_OK)
{
break;
}
//枚举压缩包内下一个文件
uzRv = cocos2d::unzGoToNextFile(uzf);
}
else
{
break;
}
}
return true;
}