参考http://www.codeproject.com/KB/cpp/xzipunzip.aspx

CreateZip() –创建一个空的 zip 文件

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();

}


不使用任何lib和dll,压缩/解压缩文件(zip格式)   





发布者:   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的更多相关文章

  1. Asp.net中文件的压缩与解压

    这里笔者为大家介绍在asp.net中使用文件的压缩与解压.在asp.net中使用压缩给大家带来的好处是显而易见的,首先是减小了服务器端文件存储的空间,其次下载时候下载的是压缩文件想必也会有效果吧,特别 ...

  2. HDFS中文件的压缩与解压

    HDFS中文件的压缩与解压 文件的压缩有两大好处:1.可以减少存储文件所需要的磁盘空间:2.可以加速数据在网络和磁盘上的传输.尤其是在处理大数据时,这两大好处是相当重要的. 下面是一个使用gzip工具 ...

  3. C# -- 文件的压缩与解压(GZipStream)

    文件的压缩与解压 需引入 System.IO.Compression; 1.C#代码(入门案例) Console.WriteLine("压缩文件..............."); ...

  4. XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)

    XML序列化   #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...

  5. C#调用7z实现文件的压缩与解压

    1.关于7z 首先在这里先介绍一下7z压缩软件,7z是一种主流的 压缩格式,它拥有极高的压缩比.在计算机科学中,7z是一种可以使用多种压缩算法进行数据压缩的档案格式.主要有以下特点: 来源且模块化的组 ...

  6. linux下tar gz bz2 tgz z等众多压缩文件的压缩与解压方法

    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...

  7. C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  8. cmd实现cab文件的压缩与解压

    压缩(makecab): 1.单文件压缩 makecab ip2.txt ip2.txt.cab 2.多文件压缩 makecab /f c:\list.txt /d expresstype=mszip ...

  9. C# 处理文件的压缩与解压

    最近做了一个关于winform 程序更新下载的功能,大概思路是,程序检测到服务端系统版本号发生改变,系统需要更新:这时请求服务端更新地址,下载更新包到程序的根目录,更新包是一个压缩包,下载完后再把压缩 ...

随机推荐

  1. css:map热点的应用

    映射图像(Image Map)可以实现的效果是:一张图片上点不同位置可以跳转到不同的地方, 实例: 1.插入一张图片 2.在底部“属性”栏中选择合适的热点工具,在图片上绘制热点区域,如 3.然后返回代 ...

  2. 【原创】Eclipse中为SVN设置快捷键

            SVN是深受开发者喜爱的版本控制工具,其较CVS有更好的控制策略.在Android开发中,我也选择SVN作为版本控制工具.Eclipse的SVN插件名叫Subclipse,可以到htt ...

  3. swift:创建表格UITableView

    用swift创建单元格和用iOS创建单元格形式基本相同,就是语法上有些异样.swift中调用成员方法不再使用[ ]来发送消息,而是使用.成员方法的形式调用成员函数.这种格式非常类似于java中的点成员 ...

  4. SQL Server下实现利用SQL Server Agent Job对索引重建实现Balance Load

    昨天工作中遇到这样一个场景,有个项目需要把某台服务器下所有的表和索引都启用数据压缩(data_compression=page),已经启用了的表和索引就不需要再压缩一次了.统计一下后发现要运行的REB ...

  5. SSIS ->> Parameter

    参数只能外部调用 参数分项目级别的参数和包级别的参数.项目级别的参数可见范围是所有包,而包级别的参数可见范围仅限于该包内. Sensitive选项是加密数据值,这样在Integration Servi ...

  6. 【原创】通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...

    这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错 ...

  7. 由阿里巴巴笔试题看java加载顺序

    一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...

  8. CSS控制背景

    一.设置背景颜色:background-color 十六进制 background-color:#ff0000; 英文名称 background-color:red; 三原色 background-c ...

  9. Spring 实践 -IoC

    Spring 实践 标签: Java与设计模式 Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转) ...

  10. 51nod1295 XOR key

    第一次写可持久化trie指针版我... //Null 的正确姿势终于学会啦qaq... #include<cstdio> #include<cstring> #include& ...