文件的压缩与解压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 程序更新下载的功能,大概思路是,程序检测到服务端系统版本号发生改变,系统需要更新:这时请求服务端更新地址,下载更新包到程序的根目录,更新包是一个压缩包,下载完后再把压缩 ...
随机推荐
- 网页爬虫的设计与实现(Java版)
网页爬虫的设计与实现(Java版) 最近为了练手而且对网页爬虫也挺感兴趣,决定自己写一个网页爬虫程序. 首先看看爬虫都应该有哪些功能. 内容来自(http://www.ibm.com/deve ...
- 从一个前端项目实践 Git flow 的流程与参考
Git flow 出自 A successful Git branching model,这里使用了一个前端项目配合本文稿实施了 git flow 并记录流程作出示例和参考,对 hotfix 与持续部 ...
- oracle11g卸载出错 无法删除文件,文件正在使用中
在卸载oracle11g时 停止服务后,运行C:\myoracle\think\product\11.2.0\dbhome_2\deinstall 中的 deinstall.bat 可以在cmd中直接 ...
- HDU 4662 MU Puzzle 简单找规律
没有任何变换(III变U和删UU操作)之前,I 的个数一定是2^x个(也就是2的整数次幂) 若仅考虑III变U,那么设U的个数为k,I 的个数变为2^x-3*k 再加上删除UU操作,假设我们删除了2* ...
- webServer xampp的安装及使用
一.下载: 西装xampp1.73版本,其他版本可能会出错,为了你能顺利安装,最好用此版本: 二.安装: 1.安装路径,最好不要放到系统盘去[c:],建议非系统盘都可,尤其是早期的XAMPP版本可能默 ...
- Python 中 os.path模板
os.path.abspath(path) #返回绝对路径 os.path.basename(path) #返回文件名 os.path.commonprefix(list) #返回list(多个路径) ...
- Vim 新用法
daw , delete a word cw , delete from cursor to the end then insert mode a word 移动: f ; Aa Oo Cc Ii S ...
- find-all-anagrams-in-a-string
https://leetcode.com/problems/find-all-anagrams-in-a-string/ package com.company; import java.util.A ...
- Android 第三方应用接入微信平台(1)
关键字:微信开放平台 Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台, 毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可 以节约 ...
- SQL查询时间去除非工作日...
CREATE FUNCTION [f_WorkDayADD]( @date datetime, --基础日期 @workday int --要增加的工作日数 )RETURNS datetime AS ...