热门标签 | 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压缩库使用

 



推荐阅读
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • Linux 基础命令详解
    本文介绍了在 Linux 系统中常见的命令及其用法。当用户登录系统后,默认提示符会显示为 [root@localhost ~]# 或 [user@localhost ~]$,其中 # 表示当前用户为 root,$ 表示普通用户。我们将深入探讨一些常用的 Linux 命令,帮助初学者更好地理解和使用这些工具。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
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社区 版权所有