【转】XZip and XUnzip - Add zip and/or unzip to your app with no extra .lib or .dll
原文:http://www.codeproject.com/Articles/4135/XZip-and-XUnzip-Add-zip-and-or-unzip-to-your-app-w
Introduction
I have already introduced XZip in a previous article. This article presents XZip and also XUnzip, which together allow you to add zip and unzip to your application without using any .lib or .dll.
First, let me acknowledge the work of Lucian Wischik, who took the many .c and .h files from Info-ZIP and produced the .cpp and .h files that XZip is based on.
XZip and XUnzip Features
Most of the functions are demonstrated in the XZip demo app. Here are the main ones:
- CreateZip() - Create a zip archive file.
////////////////////////////////////////////////////////////////////////////// //// 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() - Add a file to a zip archive.
////////////////////////////////////////////////////////////////////////////// //// 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() - Open an existing zip archive file.
////////////////////////////////////////////////////////////////////////////// //// 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() - Get information about an item in an open zip archive.
////////////////////////////////////////////////////////////////////////////// //// 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() - Find item by name and return information about it.
////////////////////////////////////////////////////////////////////////////// //// 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() - Find item by index and unzip it.
////////////////////////////////////////////////////////////////////////////// //// 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() - Close an open zip archive.
////////////////////////////////////////////////////////////////////////////// //// 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 //
How To Use
To integrate XZip into your app, you first need to add following the files to your project:
- XZip.cpp
- XZip.h
- XUnzip.cpp
- XUnzip.h
If you include XZip in a project that uses precompiled headers, you must change C/C++ Precompiled Headerssettings to Not using precompiled headers for XZip.cpp and XUnzip.cpp.
Next, include the header files XZip.h and XUnzip.h in appropriate project files. Now you are ready to start using XZip. There are many notes concerning usage of various functions in XZip.h and XUnzip.h. Please read all function headers for each function you wish to use.
Known Limitations
XZip and XUnzip have been tested only with files.
Demo App
The XZipTest.exe demo tests the APIs in XZip and XUnzip. Here is some of the output:
Frequently Asked Questions
- Can I use XZip in non-MFC apps?
Yes. It has been implemented to compile with any Win32 program. - When I try to include XZip.cpp in my MFC project, I get the compiler error
XZip.cpp(2918) : fatal error C1010: unexpected end of file while looking for precompiled header directive
. How can I fix this?
When using XZip in project that uses precompiled headers, you must change C/C++ Precompiled Headerssettings to Not using precompiled headers for XZip.cpp and XUnzip.cpp. Be sure to do this for All Configurations.
- When I try to build the demo app, I get the linker error
LINK : fatal error LNK1104: cannot open file "mfc42u.lib" Error executing link.exe
. How can I fix this?
The default installation options of Visual C++ v6.0 don't install the Unicode libraries of MFC, so you might get an error that mfc42u.lib or mfc42ud.lib cannot be found. You can fix this either by installing the Unicode libs from the VC++ install CD, or by going to Build | Set Active Configuration and selecting one of the non-Unicode configurations.You can configure the Visual Studio toolbars to include the Select Active Configuration combobox. This allows you to see at a glance what configuration you are working with.
- I don't need the Zip/Unzip functions. Can I exclude XZip.cpp/XUnzip.cpp?
Yes. You only need to include the .h/.cpp pair that you need. - Can we use XZip in our (shareware/commercial) app?
Yes, you can use XZip without charge or license fee, providing you follow the Info-ZIP restrictions as defined inXZip.cpp. - Does XZip handle pipes? in-memory zipping?
XZip has not been tested with anything other than files. - Can I use XZip in a VS2005 project?
Yes. There is a sample VS2005 project included in the download. - Does XZip work on Vista?
Yes.
Acknowledgments
- The code in XZip.cpp and XUnzip.cpp is included with the kind permission of Lucian Wischik. It is based on code from Info-ZIP. Please see XZip.cpp for Info-ZIP's copyright and restrictions.
- The CXListBox class is taken from my own article, XListBox - Owner-draw CListBox with selectable text and background colors.
Revision History
Version 1.3 - 2007 July 18
- Fixed problem with file size that is multiple of 16384, reported by Mathias Svensson.
- Fixed XZip to save file time in local time, suggested by Damir Valiulin.
Version 1.2 - 2007 June 30
- Added project for VS2005.
- Added
AddFolderContent()
contributed by Renaud Deysine. - Fixed problem with
TUnzip::Open()
reported by Pete Howells.Open()
now returns correct success code. - Fixed several bugs reported by Warren Stevens.
- Fixed a problem in
unzReadCurrentFile()
reported by Kochise. - Fixed bug in
EnsureDirectory()
reported by craigmj. - Changed
ideflate()
suggested by Michael B. Hansen. - Fixed problem with
time_t
reported by Ronney. - Fixed problems found by Boundschecker as reported by Warren Stevens.
- Made changes to
PUTSHORT
andPUTBYTE
macros and toTZip::write()
, suggested by vielheit.
Version 1.1 - 2003 May 7
- Initial public release
Usage
This software is released into the public domain. You are free to use it in any way you like, except that you may not sell this source code. If you modify it or extend it, please to consider posting new code here for everyone to share. This software is provided "as is" with no expressed or implied warranty. I accept no liability for any damage or loss of business that this software may cause.
License
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
【转】XZip and XUnzip - Add zip and/or unzip to your app with no extra .lib or .dll的更多相关文章
- Linux中zip压缩和unzip解压缩命令详解
文章转自:http://www.jb51.net/LINUXjishu/105916.html 1.把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip ...
- 每天一个linux命令(63):Linux中zip压缩和unzip解压缩命令详解
文章转自:http://www.jb51.net/LINUXjishu/105916.html 1.把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip ...
- CentOS中zip压缩和unzip解压缩命令详解
以下命令均在/home目录下操作cd /home #进入/home目录1.把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip mydata #压缩myd ...
- CentOS7中zip压缩和unzip解压缩命令详解
安装zip.unzip应用 yum install zip unzip 以下命令均在/home目录下操作cd /home #进入/home目录1.把/home目录下面的mydata目录压缩为mydat ...
- 使用gunzip、tar、rar、(zip压缩和unzip解压缩)
---------------------20171119------------------------------ 解压gz后缀 使用gunzip filename.gz ------------ ...
- CentOS Linux中zip压缩和unzip解压缩命令详解
以下命令均在/home目录下操作cd /home #进入/home目录1.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip myda ...
- zip压缩工具,unzip解压缩工具
zip压缩工具,unzip解压缩工具=================== [root@aminglinux tmp]# yum install -y zip[root@aminglinux tmp] ...
- zip 压缩文件 unzip查看zip压缩包内的内容
[root@GitLab tmp]# zip -r new.zip ./* adding: gitlab_key_file20161001-2668-1eu44mv (deflated 15%) ...
- Centos中压缩(zip)和解压(unzip)命令
摘自:http://liuzhichao.com/p/681.html 1.我下载了一个yasuo.zip文件,想解压缩: # unzip yasuo.zip 2.我当前目录下有abc1.zip,ab ...
随机推荐
- .netCore2.0 依赖注入
依赖注入(ID)是一种实现对象及其合作者或者依赖想之间松散耦合的技术对于传统的方法来说,获取类的方法通常用new如下 public class DIController : Controller { ...
- VMware workstation 非正常关机导致开机失败,解决方法
问题:VMware workstation 非正常关机导致开机失败!如下图:
- spring mvc随笔
一.SpringMvc学习笔记1.使用SpringMvc时需在web.xml文件中添加配置 <servlet> <servlet-name>springMVC</serv ...
- node版本的切换(转)
大量开发者的贡献使Node版本的迭代速度很快,版本很多(横跨0.6到0.11),所以升级Node版本就成为了一个问题.目前有n和nvm这两个工具可以对Node进行无痛升级,本文简单介绍一下二者的使用. ...
- Hibernate学习2--对象的三种状态以及映射关系的简单配置
上篇hibernate的博客总体简单梳理了对象持久化的一些思想以及hibernate中对象持久化化的方法,下面说说对象持久化过程的三种状态. 一.hibernate缓存的概念 1.session与缓存 ...
- 从MySQL到ORM(一):Centos7.x安装Mysql5.7
一.下载安装mysql 1.进入官网获取RPM包:https://dev.mysql.com/downloads/repo/yum/ 2.复制链接地址进行下载: wget https://dev.my ...
- Mybaits插入记录返回主键值
某些情况进行insert时不知道主键值(主键为自增),例如系统新增用户时,有用户序号(主键 自增),用户名,密码.插入时只需插入用户名和密码,之后取得mysql自增的序号. 如下为mysql的usr表 ...
- element中文件上传
vue+element 文件操作 作者:一粒尘土 时间:2019-3-17 注:以下操作针对 vue-cli 目录 使用 组件常用参数 组件常用方法 上传文件 上传文件格式限制 回显文件 下载文件 删 ...
- ueditor默认字体和字号修改
ueditor编辑器默认字号是16号,默认字体为sans-serif,显得有些难看,所以决定修改默认值.配置文件ueditor.config.js可以修改整个编辑器配置项,里面有配置项fontfami ...
- Github上600多个iOS开源项目地址
将Github上600多个iOS开源项目进行分类并且有相应介绍,小伙伴们快来看呀 地址:http://github.ibireme.com/github/list/ios/