参考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. struts2与struts1整合,java.lang.InstantiationException, Exception occurred during processing request: null

    做了2个action,其中一个运行没有问题,另一个报错,看下面的报错信息,再看了看struts.xml,因为没有给GetBooks这个action配置actionform,所以就导致报null.下面是 ...

  2. python matplotlib画图产生的Type 3 fonts字体没有嵌入问题

    ScholarOne's 对python matplotlib画图产生的Type 3 fonts字体不兼容,更改措施: 在程序中添加如下语句 import matplotlib matplotlib. ...

  3. php set_include_path

    string set_include_path ( string $new_include_path ) 为当前脚本设置 include_path 运行时的配置选项. Example #2 添加到in ...

  4. HDU 4662 MU Puzzle 简单找规律

    没有任何变换(III变U和删UU操作)之前,I 的个数一定是2^x个(也就是2的整数次幂) 若仅考虑III变U,那么设U的个数为k,I 的个数变为2^x-3*k 再加上删除UU操作,假设我们删除了2* ...

  5. 习惯&感恩

    A不喜欢吃鸡蛋,都给了B吃,刚开始B很感谢,久而久之便习惯了.习惯了,便理所当然了. 后来有一天,A将鸡蛋给了C,B就不爽了.她忘记了这个鸡蛋本来就是A的,A想给谁都可以. 为此,她们大吵一架,从此绝 ...

  6. mysql 字符串函数

    对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的 最左面字符的ASCII代码值.如果str是空字符串, 返回0.如果str是NULL,返回NULL. mysq ...

  7. 《OD大数据实战》驴妈妈旅游网大型离线数据电商分析平台

    一.环境搭建 1. <OD大数据实战>Hadoop伪分布式环境搭建 2. <OD大数据实战>Hive环境搭建 3. <OD大数据实战>Sqoop入门实例 4. &l ...

  8. 关于android软键盘enter键的替换与事件监听

    android软键盘事件监听enter键  软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有 normal,actionUnspecified,actionNo ...

  9. UVa 1225 Digit Counting

    题意:给出n,将前n个整数顺次写在一起,统计各个数字出现的次数. 用的最笨的办法--直接统计-- 后来发现网上的题解有先打表来做的 #include<iostream> #include& ...

  10. setTimeOut() 和 setTimeInterval()

    setTimeOut()は.指定された時間「待ってから」指定された動作を行う関数です.setTimeOut():等待指定时间,执行指定方法. setTimeInterval()は.指定された時間「間隔 ...