文件的压缩与解压XZip,XUnzip
参考http://www.codeproject.com/KB/cpp/xzipunzip.aspx
HZIP CreateZip(void *z, unsigned int len, DWORD flags);
// Parameters: z - 压缩文件名
// len - 对于压缩内存内容(ZIP_MEMORY) 这个值是压缩内存的大小; // 其他情况,这个值应当是 0 // flags - 如果是压缩文件,请用这个标志 ZIP_FILENAME // // Returns: HZIP - 非 0 值为成功, 非则返回 0
ZipAdd() 将一个文件添加进压缩文件
// Parameters: hz - 创建或 打开的zip文件句柄
// dstzn - 在zip文件中显示的文件名
// src - 对于(ZIP_FILENAME)的情况,这是将要添加进zip文件的文件名
// len - 对于压缩内存内容(ZIP_MEMORY) 这个值是压缩内存的大小;
// 其他情况,这个值应当是 0
// flags - 如果是压缩文件,请用这个标志 ZIP_FILENAME
// // Returns: ZRESULT - 成功则返回 ZR_OK
OpenZip() 打开一个已经存在的压缩文件
// Parameters: z - 压缩文件名
// len - 对于压缩内存内容(ZIP_MEMORY) 这个值是压缩内存的大小;
// 其他情况,这个值应当是 0
// flags - 如果是压缩文件,请用这个标志 ZIP_FILENAME
// // Returns: HZIP - 非 0 值为成功, 非则返回 0
GetZipItem() 得到压缩文件里面元素的信息
// Parameters: hz - 创建或 打开的zip文件句柄
// index - zip文件里的元素下标(从0开始)
// ze - 一个指向ZIPENTRY 结构体的指针(ANSI) 或者 ZIPENTRYW (Unicode) // // Returns: ZRESULT - 成功则返回 ZR_OK
FindZipItem() 在压缩文件里查找某元素
// Parameters: hz - 创建或 打开的zip文件句柄
// name - 你要在zip文件中查找的元素名字
// ic - 值为 TRUE 不区分大小写
// index - 返回要查找元素的下标,否则是-1 // ze - 返回指向ZIPENTRY 结构体的指针(ANSI) 或者 ZIPENTRYW (Unicode)
// // Returns: ZRESULT - 成功则返回 ZR_OK
UnzipItem() 解压压缩文件里的某元素
// Parameters: hz - 创建或 打开的zip文件句柄
// index - 要解压元素的下标
// dst - 解压出来文件的名字
// len - 对于压缩内存内容(ZIP_MEMORY) 这个值是压缩内存的大小;
// 其他情况,这个值应当是 0
// flags - 如果是压缩文件,请用这个标志 ZIP_FILENAME
// // Returns: ZRESULT - 成功则返回 ZR_OK
CloseZip() 关闭压缩文件
// Parameters: hz - 要操作的zip文件句柄
// // Returns: ZRESULT - 成功则返回 ZR_OK
void CZipDlg::OnOK()
{
// TODO: Add extra validation here
//********** 压缩文件 ******************************
HZIP hz = CreateZip("test.zip",0,ZIP_FILENAME);
ZipAdd(hz,"NameInZip.txt", "ReadMe.txt",0,ZIP_FILENAME);
ZipAdd(hz,"zip.h", "打包压缩文件zip.h",0,ZIP_FILENAME);
CloseZip(hz);
//********** 压缩目录和文件 **************************
HZIP hz1 = CreateZip("test1.zip",0,ZIP_FILENAME);
//空目录
ZipAdd(hz1,"aa", "Debug",0,ZIP_FOLDER);//ZIP_FOLDER
//有两个文件的目录
ZipAdd(hz1,"res\\NameInZip.txt", "ReadMe.txt",0,ZIP_FILENAME);
ZipAdd(hz1,"res\\zip.h", "打包压缩文件zip.h",0,ZIP_FILENAME);
CloseZip(hz1);
// CDialog::OnOK();
}
发布者: soarlove ——> 查看soarlove在VCCode发布的所有文章 文章类型:翻译
发布日期:2003.05.18
升级次数:0
今日浏览:2
总浏览:502
--------------------------------------------------------------------------------
评价等级:
代码下载
2位用户为此文章评分,平均分为5.0
作者:Hans Dietrich 译自:CodeProject
摘要
这篇文章介绍XZip和XUnzip两个文件,功能是不需要在你的工程中加入任何的.lib或.dll文件,完成压缩和解压缩的功能(zip格式)。
首先,让我感谢Lucian Wischik的工作,他把从Info-ZIP得到的很多.c和.h文件转化对应的.cpp和.h文件,这些文件是XZip的基础。
XZip和XUnzip的功能
大多数的函数在XZip演示工程中都有使用演示。这里列出其中重要的一些函数:
CreateZip() - 创建zip档案文件 /////////////////////////////////////////////////////////////////
//
// CreateZip()
//
// Purpose: Create a zip archive file
//
// Parameters: z - archive file name if flags is ZIP_FILENAME;
// for other uses see below
// len - for memory (ZIP_MEMORY) should be the buffer
// size; for other uses, should be 0
// flags - indicates usage, see below; for files, this
// will be ZIP_FILENAME
//
// Returns: HZIP - non-zero if zip archive created ok, otherwise 0
//
ZipAdd() - 向zip档案中添加一个文件 /////////////////////////////////////////////////////////////////
//
// ZipAdd()
//
// Purpose: Add a file to a zip archive
//
// Parameters: hz - handle to an open zip archive
// dstzn - name used inside the zip archive to identify
// the file
// src - for a file (ZIP_FILENAME) this specifies the
// filename to be added to the archive; for
// other uses, see below
// len - for memory (ZIP_MEMORY) this specifies the
// buffer length; for other uses, this should
// be 0
// flags - indicates usage, see below; for files, this
// will be ZIP_FILENAME
//
// Returns: ZRESULT - ZR_OK if success, otherwise some other value
//
OpenZip() - 打开一个已存在的zip档案文件 /////////////////////////////////////////////////////////////////
//
// OpenZip()
//
// Purpose: Open an existing zip archive file
//
// Parameters: z - archive file name if flags is ZIP_FILENAME;
// for other uses see below
// len - for memory (ZIP_MEMORY) should be the buffer
// size; for other uses, should be 0
// flags - indicates usage, see below; for files, this
// will be ZIP_FILENAME
//
// Returns: HZIP - non-zero if zip archive opened ok, otherwise 0
//
GetZipItem() - 得到打开的zip档案文件中的相关条目的信息 /////////////////////////////////////////////////////////////////
//
// GetZipItem()
//
// Purpose: Get information about an item in an open zip archive
//
// Parameters: hz - handle of open zip archive
// index - index number (0 based) of item in zip
// ze - pointer to a ZIPENTRY (if ANSI) or ZIPENTRYW
// struct (if Unicode)
//
// Returns: ZRESULT - ZR_OK if success, otherwise some other value
//
FindZipItem() - 通过名称查找条目并返回相关信息/////////////////////////////////////////////////////////////////
//
// FindZipItem()
//
// Purpose: Find item by name and return information about it
//
// Parameters: hz - handle of open zip archive
// name - name of file to look for inside zip archive
// ic - TRUE = case insensitive
// index - pointer to index number returned, or -1
// ze - pointer to a ZIPENTRY (if ANSI) or ZIPENTRYW
// struct (if Unicode)
//
// Returns: ZRESULT - ZR_OK if success, otherwise some other value
//
UnzipItem() - 通过索引找到相关条目并对其解压缩/////////////////////////////////////////////////////////////////
//
// UnzipItem()
//
// Purpose: Find item by index and unzip it
//
// Parameters: hz - handle of open zip archive
// index - index number of file to unzip
// dst - target file name of unzipped file
// len - for memory (ZIP_MEMORY. length of buffer;
// otherwise 0
// flags - indicates usage, see below; for files, this
// will be ZIP_FILENAME
//
// Returns: ZRESULT - ZR_OK if success, otherwise some other value
//
CloseZip() - 关闭已存在的档案条目/////////////////////////////////////////////////////////////////
//
// CloseZip()
//
// Purpose: Close an open zip archive
//
// Parameters: hz - handle to an open zip archive
//
// Returns: ZRESULT - ZR_OK if success, otherwise some other value
//
使用方法
为了在你的工程中使用XZip,首先你需要在你的工程中添加以下文件:
XZip.cpp
XZip.h
XUnzip.cpp
XUnzip.h
如果你在已包含XZip的工程中使用了precompiled headers,那么你必须改变C/C++ Precompiled Headers的设置,使用Not using precompiled headers。(见常见问题2,soarlove注)
接下来,在工程的适当文件中加入XZip.h和XUnzip.h声明。现在,你已经做好了使用XZip准备。在使用中有许多的注意事项,在使用函数时,请仔细查看相关函数中的说明。
演示程序
XZipTest.exe演示程序演示了在程序中使用XZip和XUnzip中API的方法。比如:
常见问题
我可以在非MFC工程中使用XZip吗? 可以。这写函数可以在任何的Win32程序中使用。
当我尝试把XZip.cpp文件引入我的MFC工程时,在XZip.cpp(2918)得到一个编译错误: fatal error C1010: unexpected end of file while looking for precompiled header directive。怎样修复? 当你在工程中使用precompiled headers时,
那么你必须改变C/C++ Precompiled Headers的设置,使用Not using precompiled headers。如下图:
当我编译演示代码时,得到如下错误error LINK : fatal error LNK1104: cannot open file "mfc42u.lib " Error executing link.exe。怎样修复? Visual C++ v6.0在默认安装中没有安装Unicode库文件,所以产生了找不到mfc42u.lib或mfc42ud.lib的错误。修复方法,1.你可以使用VC++安装CD安装Unicode库文件。2.在Build
| Set Active Configuration中选择一个非Unicode编译配置。
我不需要使用Zip/Unzip函数,是否可以排斥(exclude)XZip.cpp/XUnzip.cpp文件? 可以,你只需要在你的工程中引入include你需要部分的.h/.cpp文件
我可以在我们的共享/商业软件中使用XZip吗? 可以,你可以使用XZip,不需要支付任何的费用,但是你需要遵守在XZip.cpp文件中的关于使用Info-ZIP的限制。
文件的压缩与解压XZip,XUnzip的更多相关文章
- Asp.net中文件的压缩与解压
这里笔者为大家介绍在asp.net中使用文件的压缩与解压.在asp.net中使用压缩给大家带来的好处是显而易见的,首先是减小了服务器端文件存储的空间,其次下载时候下载的是压缩文件想必也会有效果吧,特别 ...
- HDFS中文件的压缩与解压
HDFS中文件的压缩与解压 文件的压缩有两大好处:1.可以减少存储文件所需要的磁盘空间:2.可以加速数据在网络和磁盘上的传输.尤其是在处理大数据时,这两大好处是相当重要的. 下面是一个使用gzip工具 ...
- C# -- 文件的压缩与解压(GZipStream)
文件的压缩与解压 需引入 System.IO.Compression; 1.C#代码(入门案例) Console.WriteLine("压缩文件..............."); ...
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- C#调用7z实现文件的压缩与解压
1.关于7z 首先在这里先介绍一下7z压缩软件,7z是一种主流的 压缩格式,它拥有极高的压缩比.在计算机科学中,7z是一种可以使用多种压缩算法进行数据压缩的档案格式.主要有以下特点: 来源且模块化的组 ...
- linux下tar gz bz2 tgz z等众多压缩文件的压缩与解压方法
Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...
- C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- cmd实现cab文件的压缩与解压
压缩(makecab): 1.单文件压缩 makecab ip2.txt ip2.txt.cab 2.多文件压缩 makecab /f c:\list.txt /d expresstype=mszip ...
- C# 处理文件的压缩与解压
最近做了一个关于winform 程序更新下载的功能,大概思路是,程序检测到服务端系统版本号发生改变,系统需要更新:这时请求服务端更新地址,下载更新包到程序的根目录,更新包是一个压缩包,下载完后再把压缩 ...
随机推荐
- Python3缩进对逻辑的影响
前话 我很佩服设计Python这门语言的人,因为这门语言的规则让我不得不写出美观的代码. Python的缩进要求是强制的,因为缩进不对直接影响了代码逻辑. 因为python写法相对其他编程语言简化许多 ...
- Linux任务前后台的切换
Shell支持作用控制,有以下命令实现前后台切换: 1. command& 让进程在后台运行 2. jobs 查看后台运行的进程 3. fg %n 让后台运行的进程n到前台来 4. bg %n ...
- scala函数式编程
1.作为值的函数 在Scala中,函数和数字一样,可以在变量中存放函数.可以把函数赋值给一个变量,格式为:val foee=fun _(函数名+空格+_)形式 2.匿名函数 在scala中,不需要给每 ...
- 2、Spring的LocalSessionFactoryBean创建过程源码分析
spring的LocalSessionFactoryBean生成过程与hibernate的SessionFactory生成过程是高度吻合的. 为了后面源码分析,首先讲解一个接口,一个类的功能:①.接口 ...
- docker 笔记(基本概念、快速运行、自定义镜像)
1.docker docker是一个打包应用的工具 非常强大,能把操作系统也打在包里,进行无差别部署和运行. 所以docker也被认为是建立在操作系统上的虚拟机. 2.基本概念 镜像(image) ...
- CListView虚拟列表
首先说下虚拟列表出现的原因: 数据量比较小的时候,对于CListView控件可以直接使用InsertItem并配合SetItemText函数来插入并修改数据.这样操作很直接. 但是,如果数据量比较大了 ...
- javaScript初学者易错点
大家好,这是我在博客园写的第一篇博文.作为一名前端开发初学者,由于经验不足,水平有限,在做项目的过程中总会遇到这样或那样的问题,每每这时候,我都比较喜欢到博客园这里来寻求解决方案,结果也总是能找到满意 ...
- html5 audio音频播放全解析
序 html5开启了一个新时代,因为它让浏览器本身变得不那么被动,audio api就是一个典型的列子,在html5还没确定之前,如果想要在网页上听音乐看视频唯一的办法就是用flash意思是当你没有给 ...
- 第八篇 EBS实现企业日常业务运管模型的解决方案设计思路
常业务运管模型企业有大有小,各行各业,千差万别,但,其日常业务运管也有相通之处,以典型的制造企业为例,其日常业务运管模型如下图所示: (1)企业日常业务运管模型在市场经济条件下,一个生产型 ...
- cdoj 1329 卿学姐与魔法 优先队列
卿学姐与魔法 Time Limit: 1200/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...