使用VC++压缩解压缩文件夹

时间:2022-02-23 05:41:13

前言   项目中要用到一个压缩解压缩的模块, 看了很多文章和源代码, 
都不是很称心, 现在把我自己实现的代码和大家分享.

要求:

1.使用Unicode(支持中文).

2.使用源代码.(不使用静态或者动态库)

3.实现文件夹压缩解压缩即可.(不提供单文件压缩和内存压缩)

4.压缩格式为ZIP.

5.具有一定的容错能力.(判断用户输入的内容)

代码如下:

*********************ZipImplement.h********************

使用VC++压缩解压缩文件夹

 1使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
 2使用VC++压缩解压缩文件夹// 文件名: <ZipImplement.h> 
 3使用VC++压缩解压缩文件夹// 创建者: <hwfly> 
 4使用VC++压缩解压缩文件夹// 创建日期: 2009-09-27 下午 04:51:46 
 5使用VC++压缩解压缩文件夹// 
 6使用VC++压缩解压缩文件夹// 说明:压缩解压缩地图文件夹 
 7使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
 8使用VC++压缩解压缩文件夹
 9使用VC++压缩解压缩文件夹#pragma once 
10使用VC++压缩解压缩文件夹
11使用VC++压缩解压缩文件夹#include "zip.h" 
12使用VC++压缩解压缩文件夹#include "unzip.h" 
13使用VC++压缩解压缩文件夹
14使用VC++压缩解压缩文件夹class CZipImplement 
15使用VC++压缩解压缩文件夹
16使用VC++压缩解压缩文件夹public: 
17使用VC++压缩解压缩文件夹    CZipImplement(void); 
18使用VC++压缩解压缩文件夹    ~CZipImplement(void); 
19使用VC++压缩解压缩文件夹
20使用VC++压缩解压缩文件夹private: 
21使用VC++压缩解压缩文件夹    HZIP hz;          //Zip文件句柄 
22使用VC++压缩解压缩文件夹    ZRESULT zr;    //操作返回值 
23使用VC++压缩解压缩文件夹    ZIPENTRY ze;  //Zip文件入口 
24使用VC++压缩解压缩文件夹
25使用VC++压缩解压缩文件夹    CString m_FolderPath;     //folder路径 
26使用VC++压缩解压缩文件夹    CString  m_FolderName;  //folder将要被压缩的文件夹名 
27使用VC++压缩解压缩文件夹
28使用VC++压缩解压缩文件夹private: 
29使用VC++压缩解压缩文件夹    //实现遍历文件夹 
30使用VC++压缩解压缩文件夹    void BrowseFile(CString &strFile); 
31使用VC++压缩解压缩文件夹
32使用VC++压缩解压缩文件夹    //获取相对路径 
33使用VC++压缩解压缩文件夹    void GetRelativePath(CString& pFullPath, CString& pSubString); 
34使用VC++压缩解压缩文件夹
35使用VC++压缩解压缩文件夹    //创建路径 
36使用VC++压缩解压缩文件夹    BOOL CreatedMultipleDirectory(wchar_t* direct); 
37使用VC++压缩解压缩文件夹    ///* 
38使用VC++压缩解压缩文件夹    //*********************************************************************** 
39使用VC++压缩解压缩文件夹    //* 函数: TransCStringToTCHAR 
40使用VC++压缩解压缩文件夹    //* 描述:将CString 转换为 TCHAR* 
41使用VC++压缩解压缩文件夹    //*********************************************************************** 
42使用VC++压缩解压缩文件夹    //*/ 
43使用VC++压缩解压缩文件夹    //TCHAR* CString2TCHAR(CString &str) 
44使用VC++压缩解压缩文件夹    //{ 
45使用VC++压缩解压缩文件夹    //    int iLen = str.GetLength(); 
46使用VC++压缩解压缩文件夹    //    TCHAR* szRs = new TCHAR[iLen]; 
47使用VC++压缩解压缩文件夹    //    lstrcpy(szRs, str.GetBuffer(iLen)); 
48使用VC++压缩解压缩文件夹    //    str.ReleaseBuffer(); 
49使用VC++压缩解压缩文件夹    //    return szRs; 
50使用VC++压缩解压缩文件夹    //} 
51使用VC++压缩解压缩文件夹
52使用VC++压缩解压缩文件夹public: 
53使用VC++压缩解压缩文件夹    //压缩文件夹接口 
54使用VC++压缩解压缩文件夹    BOOL Zip_PackFiles(CString& pFilePath, CString& mZipFileFullPath); 
55使用VC++压缩解压缩文件夹
56使用VC++压缩解压缩文件夹    //解压缩文件夹接口 
57使用VC++压缩解压缩文件夹    BOOL Zip_UnPackFiles(CString &mZipFileFullPath, CString& mUnPackPath); 
58使用VC++压缩解压缩文件夹
59使用VC++压缩解压缩文件夹public: 
60使用VC++压缩解压缩文件夹    //静态方法提供文件夹路径检查 
61使用VC++压缩解压缩文件夹    static BOOL FolderExist(CString& strPath); 
62使用VC++压缩解压缩文件夹};

*********************ZipImplement.cpp*********************

使用VC++压缩解压缩文件夹

  1使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
  2使用VC++压缩解压缩文件夹// 文件名: <ZipImplement.cpp> 
  3使用VC++压缩解压缩文件夹// 创建者: <hwfly> 
  4使用VC++压缩解压缩文件夹// 创建日期: 2009-09-27 下午 04:51:46 
  5使用VC++压缩解压缩文件夹// 
  6使用VC++压缩解压缩文件夹// 说明:压缩解压缩地图文件夹 
  7使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
  8使用VC++压缩解压缩文件夹
  9使用VC++压缩解压缩文件夹#include "StdAfx.h" 
 10使用VC++压缩解压缩文件夹#include "zipimplement.h" 
 11使用VC++压缩解压缩文件夹#include <direct.h> 
 12使用VC++压缩解压缩文件夹#include <vector> 
 13使用VC++压缩解压缩文件夹#include <xstring> 
 14使用VC++压缩解压缩文件夹
 15使用VC++压缩解压缩文件夹CZipImplement::CZipImplement(void) 
 16使用VC++压缩解压缩文件夹
 17使用VC++压缩解压缩文件夹
 18使用VC++压缩解压缩文件夹
 19使用VC++压缩解压缩文件夹CZipImplement::~CZipImplement(void) 
 20使用VC++压缩解压缩文件夹
 21使用VC++压缩解压缩文件夹
 22使用VC++压缩解压缩文件夹
 23使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
 24使用VC++压缩解压缩文件夹// 函数说明: 实现压缩文件夹操作 
 25使用VC++压缩解压缩文件夹// 参数说明: [in]: pFilePath         要被压缩的文件夹 
 26使用VC++压缩解压缩文件夹//                         mZipFileFullPath  压缩后的文件名和路径 
 27使用VC++压缩解压缩文件夹// 返回值: 参数有误的情况下返回FALSE,压缩成功后返回TRUE 
 28使用VC++压缩解压缩文件夹// 函数作者: <hwfly> 
 29使用VC++压缩解压缩文件夹// 创建日期: 2009-09-27 下午 04:58:52 
 30使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
 31使用VC++压缩解压缩文件夹BOOL CZipImplement::Zip_PackFiles(CString& pFilePath, CString& mZipFileFullPath) 
 32使用VC++压缩解压缩文件夹
 33使用VC++压缩解压缩文件夹    //参数错误 
 34使用VC++压缩解压缩文件夹    if ((pFilePath == L"") || (mZipFileFullPath == L"")) 
 35使用VC++压缩解压缩文件夹    { 
 36使用VC++压缩解压缩文件夹        //路径异常返回 
 37使用VC++压缩解压缩文件夹        return FALSE ; 
 38使用VC++压缩解压缩文件夹    } 
 39使用VC++压缩解压缩文件夹
 40使用VC++压缩解压缩文件夹    if(!CZipImplement::FolderExist(pFilePath)) 
 41使用VC++压缩解压缩文件夹    { 
 42使用VC++压缩解压缩文件夹        //要被压缩的文件夹不存在 
 43使用VC++压缩解压缩文件夹        return FALSE ; 
 44使用VC++压缩解压缩文件夹    } 
 45使用VC++压缩解压缩文件夹
 46使用VC++压缩解压缩文件夹    CString tZipFilePath = mZipFileFullPath.Left(mZipFileFullPath.ReverseFind('\\') + 1); 
 47使用VC++压缩解压缩文件夹    if(!CZipImplement::FolderExist(tZipFilePath)) 
 48使用VC++压缩解压缩文件夹    { 
 49使用VC++压缩解压缩文件夹        //ZIP文件存放的文件夹不存在创建它 
 50使用VC++压缩解压缩文件夹        wchar_t* temp=tZipFilePath.GetBuffer(tZipFilePath.GetLength()); 
 51使用VC++压缩解压缩文件夹        if (FALSE == CreatedMultipleDirectory(temp)) 
 52使用VC++压缩解压缩文件夹        { 
 53使用VC++压缩解压缩文件夹            //创建目录失败 
 54使用VC++压缩解压缩文件夹            return FALSE; 
 55使用VC++压缩解压缩文件夹        } 
 56使用VC++压缩解压缩文件夹    } 
 57使用VC++压缩解压缩文件夹
 58使用VC++压缩解压缩文件夹    //获得文件夹的名字 
 59使用VC++压缩解压缩文件夹    if(pFilePath.Right(1) == L"\\") 
 60使用VC++压缩解压缩文件夹    { 
 61使用VC++压缩解压缩文件夹        this->m_FolderPath = pFilePath.Left(pFilePath.GetLength() - 1); 
 62使用VC++压缩解压缩文件夹        m_FolderName = m_FolderPath.Right(m_FolderPath.GetLength() - m_FolderPath.ReverseFind('\\') - 1); 
 63使用VC++压缩解压缩文件夹    } 
 64使用VC++压缩解压缩文件夹    else 
 65使用VC++压缩解压缩文件夹    { 
 66使用VC++压缩解压缩文件夹        this->m_FolderPath = pFilePath; 
 67使用VC++压缩解压缩文件夹        m_FolderName = pFilePath.Right(pFilePath.GetLength() - pFilePath.ReverseFind('\\') - 1); 
 68使用VC++压缩解压缩文件夹    } 
 69使用VC++压缩解压缩文件夹
 70使用VC++压缩解压缩文件夹    /************************************************************************/ 
 71使用VC++压缩解压缩文件夹
 72使用VC++压缩解压缩文件夹    //创建ZIP文件 
 73使用VC++压缩解压缩文件夹    hz=CreateZip(mZipFileFullPath,0); 
 74使用VC++压缩解压缩文件夹    if(hz == 0) 
 75使用VC++压缩解压缩文件夹    { 
 76使用VC++压缩解压缩文件夹        //创建Zip文件失败 
 77使用VC++压缩解压缩文件夹        return FALSE; 
 78使用VC++压缩解压缩文件夹    } 
 79使用VC++压缩解压缩文件夹
 80使用VC++压缩解压缩文件夹    //递归文件夹,将获取的问价加入ZIP文件 
 81使用VC++压缩解压缩文件夹    BrowseFile(pFilePath); 
 82使用VC++压缩解压缩文件夹    //关闭ZIP文件 
 83使用VC++压缩解压缩文件夹    CloseZip(hz); 
 84使用VC++压缩解压缩文件夹
 85使用VC++压缩解压缩文件夹    /************************************************************************/ 
 86使用VC++压缩解压缩文件夹
 87使用VC++压缩解压缩文件夹    CFileFind tFFind; 
 88使用VC++压缩解压缩文件夹    if (!tFFind.FindFile(mZipFileFullPath)) 
 89使用VC++压缩解压缩文件夹    { 
 90使用VC++压缩解压缩文件夹        //压缩失败(未发现压缩后的文件) 
 91使用VC++压缩解压缩文件夹        return FALSE; 
 92使用VC++压缩解压缩文件夹    } 
 93使用VC++压缩解压缩文件夹
 94使用VC++压缩解压缩文件夹    return TRUE; 
 95使用VC++压缩解压缩文件夹
 96使用VC++压缩解压缩文件夹
 97使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
 98使用VC++压缩解压缩文件夹// 函数说明: 解压缩文件夹 
 99使用VC++压缩解压缩文件夹// 参数说明: [in]: mUnPackPath     解压后文件存放的路径 
100使用VC++压缩解压缩文件夹//                         mZipFileFullPath  ZIP文件的路径 
101使用VC++压缩解压缩文件夹// 返回值: 
102使用VC++压缩解压缩文件夹// 函数作者: <hwfly> 
103使用VC++压缩解压缩文件夹// 创建日期: 2009-09-27 上午 11:04:28 
104使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
105使用VC++压缩解压缩文件夹BOOL CZipImplement::Zip_UnPackFiles(CString &mZipFileFullPath, CString& mUnPackPath) 
106使用VC++压缩解压缩文件夹
107使用VC++压缩解压缩文件夹    //参数错误 
108使用VC++压缩解压缩文件夹    if ((mUnPackPath == L"") || (mZipFileFullPath == L"")) 
109使用VC++压缩解压缩文件夹    { 
110使用VC++压缩解压缩文件夹        //路径异常返回 
111使用VC++压缩解压缩文件夹        return FALSE ; 
112使用VC++压缩解压缩文件夹    } 
113使用VC++压缩解压缩文件夹
114使用VC++压缩解压缩文件夹    CFileFind tFFind; 
115使用VC++压缩解压缩文件夹    if (!tFFind.FindFile(mZipFileFullPath)) 
116使用VC++压缩解压缩文件夹    { 
117使用VC++压缩解压缩文件夹        //压缩失败(未发现压缩文件) 
118使用VC++压缩解压缩文件夹        return FALSE; 
119使用VC++压缩解压缩文件夹    } 
120使用VC++压缩解压缩文件夹
121使用VC++压缩解压缩文件夹    //如果解压缩的路径不存在 试图创建它 
122使用VC++压缩解压缩文件夹    CString tZipFilePath = mUnPackPath; 
123使用VC++压缩解压缩文件夹    if(!CZipImplement::FolderExist(tZipFilePath)) 
124使用VC++压缩解压缩文件夹    { 
125使用VC++压缩解压缩文件夹        //解压后存放的文件夹不存在 创建它 
126使用VC++压缩解压缩文件夹        wchar_t* temp=tZipFilePath.GetBuffer(tZipFilePath.GetLength()); 
127使用VC++压缩解压缩文件夹        if (FALSE == CreatedMultipleDirectory(temp)) 
128使用VC++压缩解压缩文件夹        { 
129使用VC++压缩解压缩文件夹            //创建目录失败 
130使用VC++压缩解压缩文件夹            return FALSE; 
131使用VC++压缩解压缩文件夹        } 
132使用VC++压缩解压缩文件夹    } 
133使用VC++压缩解压缩文件夹    /************************************************************************/ 
134使用VC++压缩解压缩文件夹    //打开ZIP文件 
135使用VC++压缩解压缩文件夹    hz=OpenZip(mZipFileFullPath,0); 
136使用VC++压缩解压缩文件夹    if(hz == 0) 
137使用VC++压缩解压缩文件夹    { 
138使用VC++压缩解压缩文件夹        //打开Zip文件失败 
139使用VC++压缩解压缩文件夹        return FALSE; 
140使用VC++压缩解压缩文件夹    } 
141使用VC++压缩解压缩文件夹
142使用VC++压缩解压缩文件夹    zr=SetUnzipBaseDir(hz,mUnPackPath); 
143使用VC++压缩解压缩文件夹    if(zr != ZR_OK) 
144使用VC++压缩解压缩文件夹    { 
145使用VC++压缩解压缩文件夹        //打开Zip文件失败 
146使用VC++压缩解压缩文件夹        CloseZip(hz); 
147使用VC++压缩解压缩文件夹        return FALSE;       
148使用VC++压缩解压缩文件夹    } 
149使用VC++压缩解压缩文件夹
150使用VC++压缩解压缩文件夹    zr=GetZipItem(hz,-1,&ze); 
151使用VC++压缩解压缩文件夹    if(zr != ZR_OK) 
152使用VC++压缩解压缩文件夹    { 
153使用VC++压缩解压缩文件夹        //获取Zip文件内容失败 
154使用VC++压缩解压缩文件夹        CloseZip(hz); 
155使用VC++压缩解压缩文件夹        return FALSE;       
156使用VC++压缩解压缩文件夹    } 
157使用VC++压缩解压缩文件夹
158使用VC++压缩解压缩文件夹    int numitems=ze.index; 
159使用VC++压缩解压缩文件夹    for (int i=0; i<numitems; i++) 
160使用VC++压缩解压缩文件夹    { 
161使用VC++压缩解压缩文件夹        zr=GetZipItem(hz,i,&ze); 
162使用VC++压缩解压缩文件夹        zr=UnzipItem(hz,i,ze.name); 
163使用VC++压缩解压缩文件夹
164使用VC++压缩解压缩文件夹        if(zr != ZR_OK) 
165使用VC++压缩解压缩文件夹        { 
166使用VC++压缩解压缩文件夹            //获取Zip文件内容失败 
167使用VC++压缩解压缩文件夹            CloseZip(hz); 
168使用VC++压缩解压缩文件夹            return FALSE;       
169使用VC++压缩解压缩文件夹        } 
170使用VC++压缩解压缩文件夹    } 
171使用VC++压缩解压缩文件夹
172使用VC++压缩解压缩文件夹    CloseZip(hz); 
173使用VC++压缩解压缩文件夹    return TRUE; 
174使用VC++压缩解压缩文件夹
175使用VC++压缩解压缩文件夹
176使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
177使用VC++压缩解压缩文件夹// 函数说明: 检查指定的文件夹是否存在 
178使用VC++压缩解压缩文件夹// 参数说明: [in]:strPath 检查的文件夹 (此方法会主动向路径末尾添加*.*) 
179使用VC++压缩解压缩文件夹// 返回值:BOOL类型,存在返回TRUE,否则为FALSE 
180使用VC++压缩解压缩文件夹// 函数作者: <hwfly> 
181使用VC++压缩解压缩文件夹// 创建日期: 2009-09-27 下午 02:16:36 
182使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
183使用VC++压缩解压缩文件夹BOOL CZipImplement::FolderExist(CString& strPath) 
184使用VC++压缩解压缩文件夹
185使用VC++压缩解压缩文件夹    CString sCheckPath = strPath; 
186使用VC++压缩解压缩文件夹
187使用VC++压缩解压缩文件夹    if(sCheckPath.Right(1) != L"\\") 
188使用VC++压缩解压缩文件夹        sCheckPath += L"\\"; 
189使用VC++压缩解压缩文件夹
190使用VC++压缩解压缩文件夹    sCheckPath += L"*.*"; 
191使用VC++压缩解压缩文件夹
192使用VC++压缩解压缩文件夹    WIN32_FIND_DATA wfd; 
193使用VC++压缩解压缩文件夹    BOOL rValue = FALSE; 
194使用VC++压缩解压缩文件夹
195使用VC++压缩解压缩文件夹    HANDLE hFind = FindFirstFile(sCheckPath, &wfd); 
196使用VC++压缩解压缩文件夹
197使用VC++压缩解压缩文件夹    if ((hFind!=INVALID_HANDLE_VALUE) && 
198使用VC++压缩解压缩文件夹        (wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) || (wfd.dwFileAttributes&FILE_ATTRIBUTE_ARCHIVE)) 
199使用VC++压缩解压缩文件夹    { 
200使用VC++压缩解压缩文件夹        //如果存在并类型是文件夹 
201使用VC++压缩解压缩文件夹        rValue = TRUE; 
202使用VC++压缩解压缩文件夹    } 
203使用VC++压缩解压缩文件夹
204使用VC++压缩解压缩文件夹    FindClose(hFind); 
205使用VC++压缩解压缩文件夹    return rValue; 
206使用VC++压缩解压缩文件夹
207使用VC++压缩解压缩文件夹
208使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
209使用VC++压缩解压缩文件夹// 函数说明: 遍历文件夹 
210使用VC++压缩解压缩文件夹// 参数说明: [in]:strFile 遍历的文件夹(此方法会主动向路径末尾添加*.*) 
211使用VC++压缩解压缩文件夹// 返回值:BOOL类型,存在返回TRUE,否则为FALSE 
212使用VC++压缩解压缩文件夹// 函数作者: <hwfly> 
213使用VC++压缩解压缩文件夹// 创建日期: 2009-09-27 下午 02:16:36 
214使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
215使用VC++压缩解压缩文件夹void CZipImplement::BrowseFile(CString &strFile) 
216使用VC++压缩解压缩文件夹
217使用VC++压缩解压缩文件夹    CFileFind ff; 
218使用VC++压缩解压缩文件夹    CString szDir = strFile; 
219使用VC++压缩解压缩文件夹
220使用VC++压缩解压缩文件夹    if(szDir.Right(1) != L"\\") 
221使用VC++压缩解压缩文件夹        szDir += L"\\"; 
222使用VC++压缩解压缩文件夹
223使用VC++压缩解压缩文件夹    szDir += L"*.*"; 
224使用VC++压缩解压缩文件夹
225使用VC++压缩解压缩文件夹    BOOL res = ff.FindFile(szDir); 
226使用VC++压缩解压缩文件夹    while(res) 
227使用VC++压缩解压缩文件夹    { 
228使用VC++压缩解压缩文件夹        res = ff.FindNextFile(); 
229使用VC++压缩解压缩文件夹        if(ff.IsDirectory() && !ff.IsDots()) 
230使用VC++压缩解压缩文件夹        { 
231使用VC++压缩解压缩文件夹            //如果是一个子目录,用递归继续往深一层找 
232使用VC++压缩解压缩文件夹            CString strPath = ff.GetFilePath(); 
233使用VC++压缩解压缩文件夹
234使用VC++压缩解压缩文件夹            CString subPath; 
235使用VC++压缩解压缩文件夹            GetRelativePath(strPath,subPath); 
236使用VC++压缩解压缩文件夹            //将文件添加到ZIP文件 
237使用VC++压缩解压缩文件夹            ZipAddFolder(hz,subPath); 
238使用VC++压缩解压缩文件夹            BrowseFile(strPath); 
239使用VC++压缩解压缩文件夹        } 
240使用VC++压缩解压缩文件夹        else if(!ff.IsDirectory() && !ff.IsDots()) 
241使用VC++压缩解压缩文件夹        { 
242使用VC++压缩解压缩文件夹            //显示当前访问的文件(完整路径) 
243使用VC++压缩解压缩文件夹            CString strPath = ff.GetFilePath(); 
244使用VC++压缩解压缩文件夹            CString subPath; 
245使用VC++压缩解压缩文件夹
246使用VC++压缩解压缩文件夹            GetRelativePath(strPath,subPath); 
247使用VC++压缩解压缩文件夹            //将文件添加到ZIP文件 
248使用VC++压缩解压缩文件夹            ZipAdd(hz,subPath,strPath); 
249使用VC++压缩解压缩文件夹        } 
250使用VC++压缩解压缩文件夹    } 
251使用VC++压缩解压缩文件夹
252使用VC++压缩解压缩文件夹    //关闭 
253使用VC++压缩解压缩文件夹    ff.Close(); 
254使用VC++压缩解压缩文件夹
255使用VC++压缩解压缩文件夹
256使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
257使用VC++压缩解压缩文件夹// 函数说明: 获取相对路径 
258使用VC++压缩解压缩文件夹// 参数说明: [in]:pFullPath 当前文件的完整路径 [out] : 解析后的相对路径 
259使用VC++压缩解压缩文件夹// 函数作者: <hwfly> 
260使用VC++压缩解压缩文件夹// 创建日期: 2009-9-28 上午 11:17:21 
261使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
262使用VC++压缩解压缩文件夹void CZipImplement::GetRelativePath(CString& pFullPath,CString& pSubString) 
263使用VC++压缩解压缩文件夹
264使用VC++压缩解压缩文件夹    pSubString = pFullPath.Right(pFullPath.GetLength() - this->m_FolderPath.GetLength() + this->m_FolderName.GetLength()); 
265使用VC++压缩解压缩文件夹
266使用VC++压缩解压缩文件夹
267使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
268使用VC++压缩解压缩文件夹// 函数说明: 创建多级目录 
269使用VC++压缩解压缩文件夹// 参数说明: [in]: 路径字符串 
270使用VC++压缩解压缩文件夹// 返回值: BOOL 成功True 失败False 
271使用VC++压缩解压缩文件夹// 函数作者: <hwfly> 
272使用VC++压缩解压缩文件夹// 创建日期: 2009-9-28 下午 04:53:20 
273使用VC++压缩解压缩文件夹///////////////////////////////////////////////////////////////////////////// 
274使用VC++压缩解压缩文件夹BOOL CZipImplement::CreatedMultipleDirectory(wchar_t* direct) 
275使用VC++压缩解压缩文件夹
276使用VC++压缩解压缩文件夹    std::wstring Directoryname = direct; 
277使用VC++压缩解压缩文件夹
278使用VC++压缩解压缩文件夹    if (Directoryname[Directoryname.length() - 1] !=  '\\') 
279使用VC++压缩解压缩文件夹    { 
280使用VC++压缩解压缩文件夹        Directoryname.append(1, '\\'); 
281使用VC++压缩解压缩文件夹    } 
282使用VC++压缩解压缩文件夹    std::vector< std::wstring> vpath; 
283使用VC++压缩解压缩文件夹    std::wstring strtemp; 
284使用VC++压缩解压缩文件夹    BOOL  bSuccess = FALSE; 
285使用VC++压缩解压缩文件夹    for (int i = 0; i < Directoryname.length(); i++) 
286使用VC++压缩解压缩文件夹    { 
287使用VC++压缩解压缩文件夹        if ( Directoryname[i] != '\\') 
288使用VC++压缩解压缩文件夹        { 
289使用VC++压缩解压缩文件夹            strtemp.append(1,Directoryname[i]);    
290使用VC++压缩解压缩文件夹        } 
291使用VC++压缩解压缩文件夹        else 
292使用VC++压缩解压缩文件夹        { 
293使用VC++压缩解压缩文件夹            vpath.push_back(strtemp); 
294使用VC++压缩解压缩文件夹            strtemp.append(1, '\\'); 
295使用VC++压缩解压缩文件夹        } 
296使用VC++压缩解压缩文件夹    } 
297使用VC++压缩解压缩文件夹    std::vector<std::wstring>:: const_iterator vIter; 
298使用VC++压缩解压缩文件夹    for (vIter = vpath.begin();vIter != vpath.end(); vIter++) 
299使用VC++压缩解压缩文件夹    { 
300使用VC++压缩解压缩文件夹        bSuccess = CreateDirectory(vIter->c_str(), NULL) ? TRUE :FALSE; 
301使用VC++压缩解压缩文件夹    } 
302使用VC++压缩解压缩文件夹
303使用VC++压缩解压缩文件夹    return bSuccess; 
304使用VC++压缩解压缩文件夹}

=====================以上为源代码=====================

简单说明:

1.使用VS2003编写.

2.WinXp sp2下运行测试通过.

3.为了简化算法,使用了很多MFC提供的函数, 如果要移植到标准C++请重新实现部分函数.

4.压缩算法采用了ljw1004 这位高手的算法.

5."zip.h" 和 "unzip.h"以及实现请至http://www.codeproject.com/KB/files/zip_utils.aspx 下载, 下载的源文件中有示例程序可以参考. 
    将下载后的 zip.h unzip.h zip.cpp unzip.cpp 添加到自己的项目中.

后记:第一次使用VC++开发项目,遇到了很多问题,对于相关的问题和我自己的解决办法将在以后的文章中给出.