您的位置:首页 > 编程语言 > C语言/C++

[原]使用VC++压缩解压缩文件夹

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

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

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

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

4.压缩格式为ZIP.

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

代码如下:

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

// 文件名: <ZipImplement.h>
3// 创建者: <hwfly>
4// 创建日期: 2009-09-27 下午 04:51:46
5//
6// 说明:压缩解压缩地图文件夹
7
9#pragma once
10
11#include "zip.h"
12#include "unzip.h"
13
14class CZipImplement
15// 文件名: <ZipImplement.cpp>
3// 创建者: <hwfly>
4// 创建日期: 2009-09-27 下午 04:51:46
5//
6// 说明:压缩解压缩地图文件夹
7
9#include "StdAfx.h"
10#include "zipimplement.h"
11#include <direct.h>
12#include <vector>
13#include <xstring>
14
15CZipImplement::CZipImplement(void)
16
19CZipImplement::~CZipImplement(void)
20
23// 函数说明: 实现压缩文件夹操作
25// 参数说明: [in]: pFilePath 要被压缩的文件夹
26// mZipFileFullPath 压缩后的文件名和路径
27// 返回值: 参数有误的情况下返回FALSE,压缩成功后返回TRUE
28// 函数作者: <hwfly>
29// 创建日期: 2009-09-27 下午 04:58:52
30BOOL CZipImplement::Zip_PackFiles(CString& pFilePath, CString& mZipFileFullPath)
32
97// 函数说明: 解压缩文件夹
99// 参数说明: [in]: mUnPackPath 解压后文件存放的路径
100// mZipFileFullPath ZIP文件的路径
101// 返回值:
102// 函数作者: <hwfly>
103// 创建日期: 2009-09-27 上午 11:04:28
104BOOL CZipImplement::Zip_UnPackFiles(CString &mZipFileFullPath, CString& mUnPackPath)
106
176// 函数说明: 检查指定的文件夹是否存在
178// 参数说明: [in]:strPath 检查的文件夹 (此方法会主动向路径末尾添加*.*)
179// 返回值:BOOL类型,存在返回TRUE,否则为FALSE
180// 函数作者: <hwfly>
181// 创建日期: 2009-09-27 下午 02:16:36
182BOOL CZipImplement::FolderExist(CString& strPath)
184
208// 函数说明: 遍历文件夹
210// 参数说明: [in]:strFile 遍历的文件夹(此方法会主动向路径末尾添加*.*)
211// 返回值:BOOL类型,存在返回TRUE,否则为FALSE
212// 函数作者: <hwfly>
213// 创建日期: 2009-09-27 下午 02:16:36
214void CZipImplement::BrowseFile(CString &strFile)
216
256// 函数说明: 获取相对路径
258// 参数说明: [in]:pFullPath 当前文件的完整路径 [out] : 解析后的相对路径
259// 函数作者: <hwfly>
260// 创建日期: 2009-9-28 上午 11:17:21
261void CZipImplement::GetRelativePath(CString& pFullPath,CString& pSubString)
263
267// 函数说明: 创建多级目录
269// 参数说明: [in]: 路径字符串
270// 返回值: BOOL 成功True 失败False
271// 函数作者: <hwfly>
272// 创建日期: 2009-9-28 下午 04:53:20
273BOOL CZipImplement::CreatedMultipleDirectory(wchar_t* direct)
275 std::wstring Directoryname = direct;
277
278 if (Directoryname[Directoryname.length() - 1] != '\\')
279 Directoryname.append(1, '\\');
281 }
282 std::vector< std::wstring> vpath;
283 std::wstring strtemp;
284 BOOL bSuccess = FALSE;
285 for (int i = 0; i < Directoryname.length(); i++)
286 if ( Directoryname[i] != '\\')
288 strtemp.append(1,Directoryname[i]);
290 }
291 else
292 vpath.push_back(strtemp);
294 strtemp.append(1, '\\');
295 }
296 }
297 std::vector<std::wstring>:: const_iterator vIter;
298 for (vIter = vpath.begin();vIter != vpath.end(); vIter++)
299 bSuccess = CreateDirectory(vIter->c_str(), NULL) ? TRUE :FALSE;
301 }
302
303 return bSuccess;
304}

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

简单说明:

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++开发项目,遇到了很多问题,对于相关的问题和我自己的解决办法将在以后的文章中给出.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: