文件的压缩与解压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 程序更新下载的功能,大概思路是,程序检测到服务端系统版本号发生改变,系统需要更新:这时请求服务端更新地址,下载更新包到程序的根目录,更新包是一个压缩包,下载完后再把压缩 ...
随机推荐
- 修改webapp底图
从webapp目录可以看出地图归mapManager处理,所以在MapManager.js中找关于加载地图的方法, 很容易在里面找到showMap方法: 下面有另一个方法_showMap方法,查看定义 ...
- 使用StarUML画类图
1.综述(What) StarUML是一种生成类图和其他类型的UML图表的工具. StarUML(简称SU),是一种创建UML类图,并能够自动生成Java的“stub code” 的工具.SU也可以做 ...
- Error LNK2019: unresolved external symbol "char * __stdcall _com_util::ConvertBSTRToString(wchar_t *)"
Error 2 error LNK2019: unresolved external symbol "char * __stdcall _com_util::ConvertBSTRToStr ...
- 手持机连不上信道设置为13的AP
这个是正常的, 因为每个国家的CHANNEL 都不一样, 中国和美国都只支持 CHANNEL 1- 11 欧洲会到 12, 13 channal , 日本会到CHANNEL 14 . "O ...
- BZOJ 1016 星球大战starwar(逆向-并查集)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1015 题意:给出一个图.每次删掉一个点,求删掉之后连通块个数. 思路:正着做不好做,我们 ...
- 在cmd中登录ftp服务器
http://jingyan.baidu.com/article/0bc808fc8778ee1bd485b93b.html C:\Users\Administrator>ftpftp> ...
- 径向基函数(RBF)神经网络
RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式识别.信息处理.图像处理.系统 ...
- 【温故知新】c#异步编程模型(APM)--使用委托进行异步编程
当我们用到C#类许多耗时的函数XXX时,总会存在同名的类似BeginXXX,EndXXX这样的函数. 例如Stream抽象类的Read函数就有 public abstract int Read(byt ...
- This project needs to migrate WTP metadata
in command-line: path> mvn eclipse:clean path> mvn -Dwtpversion=1.5 eclipse:eclipse path> m ...
- 浅谈B+树索引的分裂优化(转)
http://www.tamabc.com/article/85038.html 从MySQL Bug#67718浅谈B+树索引的分裂优化 原文链接:http://hedengcheng.com/ ...