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