您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx zip文件加压

2013-11-27 13:49 225 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: