代码拉取完成,页面将自动刷新
同步操作将从 kanakdillon/zipclass 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "cUnpackFile.h"
static inline bool IsFileExist(const char* pPath)
{
return GetFileAttributesA(pPath) != INVALID_FILE_ATTRIBUTES;
}
void cUnpackFile::CreateDirFromZip(const char * dirName, const char * zipFileName)
{
bool slashFlag = true;
unzFile unZipDir = unzOpen(zipFileName);
if (unZipDir == NULL)
{
printf("无法解压zip文件!");
return;
}
if (!IsFileExist(dirName))
_mkdir(dirName);
int nResult = unzGoToFirstFile(unZipDir);
BYTE * buf;
while(nResult == UNZ_OK)
{
char szCurrentFile[MAX_PATH];
unz_file_info unZipFileInfo;
unzGetCurrentFileInfo(unZipDir, &unZipFileInfo, szCurrentFile, sizeof(szCurrentFile), NULL, 0, NULL, 0);
std::string filePath = std::string(szCurrentFile);
std::string fileName;
char fileRoot[MAX_PATH];
unsigned last_slash_pos = filePath.find_last_of('\\');
if (last_slash_pos == std::string::npos){
last_slash_pos = filePath.find_last_of('/');
slashFlag = false;
}
if (last_slash_pos != std::string::npos )
{
strcpy_s(fileRoot,dirName);
if (slashFlag)
strcat_s(fileRoot,"\\");
else
strcat_s(fileRoot,"/");
std::string filetemp = filePath.substr(0,last_slash_pos);
strcat_s(fileRoot,filetemp.c_str());
if (!IsFileExist(fileRoot))
_mkdir(fileRoot);
if (last_slash_pos == filePath.length()-1)
{
nResult = unzGoToNextFile(unZipDir);
continue;//文件夹项
}
}
int size = unZipFileInfo.uncompressed_size;
buf = new BYTE[size];
if (!buf)
{
printf("No enough Memory!\n");
return;
}
memset(buf, 0, size*sizeof(char));
int nReadBytes;
if (UNZ_OK == unzOpenCurrentFilePassword(unZipDir,NULL))
{
nReadBytes = unzReadCurrentFile(unZipDir, buf , size);
unzCloseCurrentFile(unZipDir);
}
FILE * pFile;
char filePos[MAX_PATH];
strcpy_s(filePos,dirName);
if (slashFlag)
strcat_s(filePos,"\\");
else
strcat_s(filePos,"/");
strcat_s(filePos,filePath.c_str());
fopen_s(&pFile,filePos, "wb");
if (pFile)
fwrite(buf,nReadBytes,1,pFile);
else
printf("无法打开输出文件 %s \n",filePos);
fclose(pFile);
delete buf;
nResult = unzGoToNextFile(unZipDir);
}
unzClose(unZipDir);
}
void cUnpackFile::CreateFileFromZip(const char * fName, const char * zipFileName)
{
bool slashFlag = true;
unzFile unZipDir = unzOpen(zipFileName);
if (unZipDir == NULL)
{
printf("无法解压zip文件!");
return;
}
int nResult = unzGoToFirstFile(unZipDir);
BYTE * buf;
if(nResult == UNZ_OK)
{
char szCurrentFile[MAX_PATH];
unz_file_info unZipFileInfo;
unzGetCurrentFileInfo(unZipDir, &unZipFileInfo, szCurrentFile, sizeof(szCurrentFile), NULL, 0, NULL, 0);
int size = unZipFileInfo.uncompressed_size;
buf = new BYTE[size];
if (!buf)
{
printf("No enough Memory!\n");
return;
}
memset(buf, 0, size*sizeof(char));
int nReadBytes;
if (UNZ_OK == unzOpenCurrentFilePassword(unZipDir,NULL))
{
nReadBytes = unzReadCurrentFile(unZipDir, buf , size);
unzCloseCurrentFile(unZipDir);
}
FILE * pFile;
fopen_s(&pFile,fName, "wb");
if (pFile)
fwrite(buf,nReadBytes,1,pFile);
else
printf("无法打开输出文件 %s \n",fName);
fclose(pFile);
delete buf;
}
unzClose(unZipDir);
}
cUnpackFile::cUnpackFile()
{
}
cUnpackFile::~cUnpackFile()
{
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。