热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

C++压缩解压文件

转载来自:https:www.cnblogs.comlinuxAndMcup14508503.html一、ZIP下载ZIP主要是用于简单的压缩和解压,引入比较方便,而且极其易使用,

转载来自:https://www.cnblogs.com/linuxAndMcu/p/14508503.html


一、ZIP下载

ZIP 主要是用于简单的压缩和解压,引入比较方便,而且极其易使用,方便用户操作,下载下来就四个文件:zip.h、zip.cpp、unzip.h、unzip.cpp。

下载地址:http://www.codeproject.com/Articles/7530/Zip-Utils-clean-elegant-simple-C-Win


二、示例

使用的时候直接 include 就行了。下面是一些示例:

/*For unzipping, add "unzip.cpp" to your project. Then, for example*/
#include
"unzip.h"
//
HZIP hz = OpenZip("c:\\stuff.zip",0);
ZIPENTRY ze; GetZipItem(hz,
-1,&ze); int numitems=ze.index;
for (int i=0; i)
{ GetZipItem(hz,i,&ze);
UnzipItem(hz,i,ze.name);
}
CloseZip(hz);


/*For zipping, add "zip.cpp" to your project. (You can add just one of
zip/unzip, or both; they function independently and also co-exist.)
*/
#include
"zip.h"
//
HZIP hz = CreateZip("c:\\simple1.zip",0);
ZipAdd(hz,
"znsimple.bmp", "c:\\simple.bmp");
ZipAdd(hz,
"znsimple.txt", "c:\\simple.txt");
CloseZip(hz);

添加压缩的封装函数:

void AddFileToZip(zipFile zf, const char* fileNameInZip, const char* srcFile)
{
FILE
* srcfp = NULL;

// 初始化写入zip的文件信息
zip_fileinfo zi;
zi.tmz_date.tm_sec
= zi.tmz_date.tm_min = zi.tmz_date.tm_hour =
zi.tmz_date.tm_mday
= zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0;
zi.dosDate
= 0;
zi.internal_fa
= 0;
zi.external_fa
= 0;

// 如果srcFile为空,加入空目录
char new_file_name[WRITEBUFFERSIZE];
memset(new_file_name,
0, sizeof(new_file_name));
strcat(new_file_name, fileNameInZip);
if (srcFile == NULL)
{
strcat(new_file_name,
"/");
}

// 在zip文件中创建新文件
zipOpenNewFileInZip(zf, new_file_name, &zi, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_DEFAULT_COMPRESSION);
if (srcFile != NULL)
{
// 打开源文件
srcfp = fopen(srcFile, "rb");
if (srcfp == NULL)
{
zipCloseFileInZip(zf);
//关闭zip文件
return;
}

// 读入源文件并写入zip文件
int size_buf = 0;
void* buf=NULL;
size_buf
= WRITEBUFFERSIZE;
buf
= (void*)malloc(size_buf);

int numBytes = 0;
while( !feof(srcfp) )
{
numBytes
= fread(buf, 1, size_buf, srcfp);
zipWriteInFileInZip(zf, buf, numBytes);
if( ferror(srcfp) )
break;
}

// 关闭源文件
fclose(srcfp);
}

// 关闭zip文件
zipCloseFileInZip(zf);
}

使用:

zipFile zf;
AddFileToZip(zf,
"zip里的名字","需要压缩的源文件");
zipClose(zf,
0);

三、扩展:流行的一些C++压缩&解压库



  • bzip2:一个完全免费,免费专利和高质量的数据压缩。

  • doboz:能够快速解压缩的压缩库。

  • PhysicsFS:对各种归档提供抽象访问的库,主要用于视频游戏,设计灵感部分来自于Quake3的文件子系统。

  • KArchive:用于创建,读写和操作文件档案(例如zip和 tar)的库,它通过QIODevice的一系列子类,使用gzip格式,提供了透明的压缩和解压缩的数据。

  • LZ4 :非常快速的压缩算法。

  • LZHAM :无损压缩数据库,压缩比率跟LZMA接近,但是解压缩速度却要快得多。

  • LZMA :7z格式默认和通用的压缩方法。

  • LZMAT :及其快速的实时无损数据压缩库。

  • miniz:单一的C源文件,紧缩/膨胀压缩库,使用zlib兼容API,ZIP归档读写,PNG写方式。

  • Minizip:Zlib最新bug修复,支持PKWARE磁盘跨越,AES加密和IO缓冲。

  • Snappy :快速压缩和解压缩。

  • ZLib :非常紧凑的数据流压缩库。

  • ZZIPlib:提供ZIP归档的读权限。

  • QuaZIP:是使用 Qt/C++ 对 zlib 进行简单封装的用于压缩及解压缩 ZIP 的开源库,适用于多种平台,资料也比较多,就是编译稍麻烦些。

参考:

C++ ZIP压缩文件,使用zlib库和codeproject上的zip_utils

C++ zip压缩库使用

 



推荐阅读
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文详细介绍如何在 Windows 环境下安装 Ubuntu 12.04 版本的 Linux 操作系统,包括必要的软件下载、配置步骤以及注意事项。 ... [详细]
  • 本文介绍如何使用特定的软件环境配置来捕获和解码通过GZIP压缩的数据包。请注意,不同的软件版本可能会导致操作步骤或结果有所差异。 ... [详细]
  • 随着技术社区的发展,越来越多的技术爱好者选择通过撰写博客来分享自己的学习经验和项目进展。本文将介绍一个具体案例,即将一套原本运行于Windows平台的代码成功移植到Linux(Redhat)环境下的过程与挑战。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 在安装Ubuntu 12.10并尝试安装VMware Tools时,遇到了一个常见的错误提示:指定的路径不是有效的3.5.0-17-generic内核头文件路径。本文将提供解决这一问题的具体步骤。 ... [详细]
  • RedHat 系统下配置国内 YUM 源以替代官方收费源的方法
    本文详细介绍如何在 RedHat Linux 中安装并配置 YUM 包管理器,并通过使用国内镜像源来解决因未购买官方服务而导致的更新源限制问题。 ... [详细]
  • Barbican 是 OpenStack 社区的核心项目之一,旨在为各种环境下的云服务提供全面的密钥管理解决方案。 ... [详细]
  • 解决vCenter vSphere HA初始化失败的问题
    本文探讨了在集群中遇到的所有vSphere HA主机状态显示‘无法正确安装或配置vSphere HA代理’错误的情况,并详细介绍了排查与解决步骤,包括检查HA初始化错误及安装HA代理的常见故障排除方法。 ... [详细]
  • 本文提供了在 Kali Linux 2020.01 x64 版本上安装 Docker 的详细步骤,包括环境准备、使用清华大学镜像源、配置 APT 仓库以及安装过程中的常见问题处理。 ... [详细]
  • OBS (Open Broadcaster Software) 架构解析
    本文介绍 OBS(Open Broadcaster Software),一款专为直播设计的开源软件。文章将详细探讨其技术架构、核心组件及其开发环境要求。 ... [详细]
  • 本文探讨了使用Java创建高效且可靠的基准测试的方法,强调了选择合适的工具和理解潜在影响因素的重要性。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
author-avatar
快乐星期八2012_846
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有