C++ 实现zip解压缩

来源:互联网 发布:什么软件可以男变女 编辑:程序博客网 时间:2024/06/01 15:05
利用第三方 XUnzip 封装自己的解压函数。

XUnzip和封装的函数在 【 下载处:】   点击此处文字开始下载


自己封装函数好像MFC里边使用没有问题。


头文件名称MyUnZip.h

/* 防止多次包含 */#ifndef MYUNZIP_H_#define MYUNZIP_H_#include "XUnzip.h"#include <afxwin.h>#include <vector>#ifdef _UNICODE#define MyUnZip MyUnZipW/* UNICODE版本 */std::vector<CString> & MyUnZipW (CString szPathAndFileName, CString szUnZipPath = _T(""));#else#define MyUnZip MyUnZipA/* ANSCII版本 */std::vector<CString> & MyUnZipA (CString szPathAndFileName, CString szUnZipPath = "");#endif/******************************************************************|--函数功能: |--  解压zip压缩包到指定路径|--|--输入参数:|--  szPathAndFileName: 待解压 zip压缩包所在文件夹路径和zip压缩名称; 如"D://00//1.zip"|--  szUnZipPath: 解压出来的文件 所存放的问价完整路径; 如 “D://01”|--  此参数省略时,默认解压到exe程序所在文件夹下的 Skin文件|--|--返回值:|--  解压出来所有文件的完整路径******************************************************************/#endif


#include "stdafx.h"#include "MyUnZip.h"std::vector<CString> & MyUnZipW (CString szPathAndFileName, CString szUnZipPath){static std::vector<CString> szFilePath;#ifdef _UNICODEWCHAR buffer[248];if(szUnZipPath != L""){/* 如果文件路径不存在 先创建,存在 不做任何修改 */SHCreateDirectoryEx(NULL, szUnZipPath, NULL);}else{GetCurrentDirectory(248, (LPWSTR)&buffer);szUnZipPath = buffer;szUnZipPath += L"\\Skin";SHCreateDirectoryEx(NULL, szUnZipPath, NULL);}HZIP hz=OpenZip( (void*)(LPTSTR)(LPCTSTR)szPathAndFileName, 0, ZIP_FILENAME);ZIPENTRYW ze; GetZipItem(hz, -1, &ze); int numitems=ze.index;for (int zi=0; zi<numitems; zi++){ ZIPENTRYW ze; GetZipItem(hz,zi,&ze); UnzipItem(hz, zi, (void*)(LPTSTR)(LPCTSTR)(szUnZipPath+L"\\"+ze.name), 0,ZIP_FILENAME);         szFilePath.push_back(szUnZipPath+L"\\"+ze.name);}CloseZip(hz);#endifreturn szFilePath;}std::vector<CString> & MyUnZipA (CString szPathAndFileName, CString szUnZipPath){static std::vector<CString> szFilePath;#ifndef _UNICODEchar buffer[248];if(szUnZipPath != ""){/* 如果文件路径不存在 先创建,存在 不做任何修改 */SHCreateDirectoryEx(NULL, szUnZipPath, NULL);}else{GetCurrentDirectory(248, (LPSTR)&buffer);szUnZipPath = buffer;szUnZipPath += "\\Skin";SHCreateDirectoryEx(NULL, szUnZipPath, NULL);}HZIP hz=OpenZip( (void*)(LPTSTR)(LPCTSTR)szPathAndFileName, 0, ZIP_FILENAME);ZIPENTRY ze; GetZipItem(hz, -1, &ze); int numitems=ze.index;for (int zi=0; zi<numitems; zi++){ ZIPENTRY ze; GetZipItem(hz,zi,&ze); UnzipItem(hz, zi, (void*)(LPTSTR)(LPCTSTR)(szUnZipPath+"\\"+ze.name), 0,ZIP_FILENAME);         szFilePath.push_back(szUnZipPath+"\\"+ze.name);}CloseZip(hz);#endifreturn szFilePath;}


原创粉丝点击