参考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. 【重走Android之路】【路线篇(二)】知识点归纳

    [重走Android之路][路线篇(二)]知识点归纳   参考:http://blog.csdn.net/xujing81/article/details/7313507   第一阶段:Java面向对 ...

  2. 初始化glew,创建OpenGL渲染上下文

    void RegisterWinDowClass(HINSTANCE hInstance,std::string className,WNDPROC proc) { WNDCLASS wndClass ...

  3. .NET单例模式-------各种写法&&验证

    .NET单例模式-------各种写法&&验证 前言 单例模式对大家来说都不陌生,也很容易搞懂其原理,本篇文章也不提供单例模式的详细原理解析,本篇文章的目的是展示在C#中单例模式的各种 ...

  4. Python命令行解析库argparse

    2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 1.example 有一道面试题:编写一个脚本main.py,使用方式如下: ...

  5. .Net MVC视图

    1.View显示 return View(): 默认为/Views/<控制器>/<方法> return View("Test"); 显示/View/< ...

  6. poj 1742 Coins (多重背包)

    http://poj.org/problem?id=1742 n个硬币,面值分别是A1...An,对应的数量分别是C1....Cn.用这些硬币组合起来能得到多少种面值不超过m的方案. 多重背包,不过这 ...

  7. debian系统安装Thinkpad T410s的无线网卡驱动:centrino Advanced-N 6200 2x2 AGN

    前几天搞到手一台小黑:T410s.自带系统是win7.由于想学习debian,所以就搞成了双系统,安装了一套debian 6.0. 可是让我困惑的是在debian下,无法使用T410s的网卡,因为默认 ...

  8. HDU 4664 Triangulation(SG函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4664 题意:给出一个n个点的凸包(不存在三点共线).每次可以选择两个点连线,但是任意两条线只能在顶点处 ...

  9. STL笔记(5)条款49:学习破解有关STL的编译器诊断信息

    STL笔记(5)条款49:学习破解有关STL的编译器诊断信息 条款49:学习破解有关STL的编译器诊断信息 用一个特定的大小定义一个vector是完全合法的, vector<int> v( ...

  10. hdu 4810 Wall Painting (组合数学+二进制)

    题目链接 下午比赛的时候没有想出来,其实就是int型的数分为30个位,然后按照位来排列枚举. 题意:求n个数里面,取i个数异或的所有组合的和,i取1~n 分析: 将n个数拆成30位2进制,由于每个二进 ...