C++解压zip文件

来源:互联网 发布:android js框架 编辑:程序博客网 时间:2024/06/10 02:42


/************************************************************************/
/* 对指定文件夹下面的zip压缩文件进行解压
/* sourcePath: zip压缩包所在路径
/* targetPath: 解压后的路径
/* bNeedDel:  是否删除源zip压缩包文件                                         
/************************************************************************/
bool UnzipFile(char* sourcePath,char * targetPath, bool bNeedDel)
{
    ZIPENTRY ze;

    CFileFind fileFinder;
    CString filePath = CString(sourcePath) + _T("//*.*");
     
    BOOL bFinished = fileFinder.FindFile(filePath);
    while(bFinished)  //每次循环对应一个类别目录
    {
     bFinished = fileFinder.FindNextFile();
        CString fileName = fileFinder.GetFileName();
        int dotPos=fileName.ReverseFind('.');
        CString fileExt=fileName.Right(fileName.GetLength()-dotPos);

  CString strZipPath = fileName.Mid(0,dotPos);
        if(fileExt == _T(".zip"))  //若是txt文件则开始分类测试
        {
   CString strZipName = CString(sourcePath) + CString("\\") + fileName;
   //CString strUnZipPath = CString(targetPath) + CString("\\") + strZipPath;
   CString strUnZipPath = CString(targetPath);
   if(!PathFileExists(strUnZipPath))
   {
    CreateDirectory(strUnZipPath,NULL);
   }
   HZIP hz = OpenZip(strZipName.GetBuffer(0), 0, ZIP_FILENAME);
   if (hz)
   {
    GetZipItem(hz, -1, &ze);
    int iCount= ze.index;
    for(int i=0; i<iCount; i++)
    {     
     GetZipItem(hz, i, &ze);
     CString strZipTargetName = CString(strUnZipPath) + CString("\\") + ze.name;
     ZRESULT zr = UnzipItem(hz, i, strZipTargetName.GetBuffer(0), 0, ZIP_FILENAME);
    } 
   }   
   CloseZip(hz);
  }
 }
 
 if(bNeedDel)
 {
  CString filePath = CString(sourcePath) + _T("//*.*");
     
  BOOL bFinished = fileFinder.FindFile(filePath);
  while(bFinished)  //每次循环对应一个类别目录
  {
   bFinished = fileFinder.FindNextFile();
   CString fileName = fileFinder.GetFileName();
   if(fileName.Compare(".")==0)
    continue;
   if(fileName.Compare("..")==0)
    continue;
   if(fileName.GetLength()>0)
   {
    DeleteFile(CString(sourcePath)+CString("\\") + fileName);
   }
  }
 }

    fileFinder.Close();
 return true;
}

0 0
原创粉丝点击