当前位置:首页 » 文件管理 » 解压缩的库

解压缩的库

发布时间: 2022-08-15 08:59:25

1. zlib库可以解压rar压缩包吗

1准备工作。下载zlib.dll。以及相关头文件。将dll文件及头文件加入工程。2压缩:调用函数compress.形式为intcompress(Byte*dest,uLong*destLen,constByte*source,ULONGsourceLen);功能是将source指向的空间,长度为sourceLen的数据进行压缩,压缩数据储存在dest中,长度由参数destLen返回。如果压缩出错,返回对应错误号,否则返回0.3解压缩:调用函数uncompress.形式为intuncompress(Byte*dest,uLong*destLen,constByte*source,ULONGsourceLen);功能是将source指向的空间,长度为sourceLen的数据进行解压缩,解压缩后的数据储存在dest中,长度由参数destLen返回。如果解压缩出错,返回对应错误号,否则返回0.

2. C++语言怎么用zlib库来解压.ISO或.zip文件

下面是使用zlib库的压缩和解压缩演示代码:

#include <stdlib.h>
#include <stdio.h>
#include <zlib.h>
int main(int argc, char* argv[])
{
FILE* file;
uLong flen;
unsigned char* fbuf = NULL;
uLong clen;
unsigned char* cbuf = NULL;
/* 通过命令行参数将srcfile文件的数据压缩后存放到dstfile文件中 */
if(argc < 3)
{
printf("Usage: zcdemo srcfile dstfile\n");
return -1;
}
if((file = fopen(argv[1], "rb")) == NULL)
{
printf("Can\'t open %s!\n", argv[1]);
return -1;
}
/* 装载源文件数据到缓冲区 */
fseek(file, 0L, SEEK_END);    /* 跳到文件末尾 */
flen = ftell(file);        /* 获取文件长度 */
fseek(file, 0L, SEEK_SET);
if((fbuf = (unsigned char*)malloc(sizeof(unsigned char) * flen)) == NULL)
{
printf("No enough memory!\n");
fclose(file);
return -1;
}
fread(fbuf, sizeof(unsigned char), flen, file);
/* 压缩数据 */
clen = compressBound(flen);
if((cbuf = (unsigned char*)malloc(sizeof(unsigned char) * clen)) == NULL)
{
printf("No enough memory!\n");
fclose(file);
return -1;
}
if(compress(cbuf, &clen, fbuf, flen) != Z_OK)
{
printf("Compress %s failed!\n", argv[1]);
return -1;
}
fclose(file);
if((file = fopen(argv[2], "wb")) == NULL)
{
printf("Can\'t create %s!\n", argv[2]);
return -1;
}
/* 保存压缩后的数据到目标文件 */
fwrite(&flen, sizeof(uLong), 1, file);    /* 写入源文件长度 */
fwrite(&clen, sizeof(uLong), 1, file);    /* 写入目标数据长度 */
fwrite(cbuf, sizeof(unsigned char), clen, file);
fclose(file);
free(fbuf);
free(cbuf);
return 0;
}

3. 用C语言简单演示如何借助zlib库实现文件的压缩和解压缩

问题的根源在于这些网友对于字符串和字节流的概念非常的模糊,对文本文件和二进制文件的区别常常模棱两可,其实字节流可以表示所有的数据,二进制文件才是任何文件的本质。字节流是一个字节接一个字节,并没有结束符号,所以需要给它一个长度信息。二进制文件是一个字节接一个字节,并没有换行符之类的。文件压缩的时候,可以通过源文件的长度自动计算缓冲区的长度,压缩后写入目标文件之前,需先保留源文件和目标数据的长度作为解压缩的依据,参考如下代码:#include #include #include int main(int argc, char* argv[]) { FILE* file; uLong flen; unsigned char* fbuf = NULL; uLong clen; unsigned char* cbuf = NULL; /* 通过命令行参数将srcfile文件的数据压缩后存放到dstfile文件中 */ if(argc < 3) { printf("Usage: zcdemo srcfile dstfile\n"); return -1; } if((file = fopen(argv[1], "rb")) == NULL) { printf("Can\'t open %s!\n", argv[1]); return -1; } /* 装载源文件数据到缓冲区 */ fseek(file, 0L, SEEK_END); /* 跳到文件末尾 */ flen = ftell(file); /* 获取文件长度 */ fseek(file, 0L, SEEK_SET); if((fbuf = (unsigned char*)malloc(sizeof(unsigned char) * flen)) == NULL) { printf("No enough memory!\n"); fclose(file); return -1; } fread(fbuf, sizeof(unsigned char), flen, file); /* 压缩数据 */ clen = compressBound(flen); if((cbuf = (unsigned char*)malloc(sizeof(unsigned char) * clen)) == NULL) { printf("No enough memory!\n"); fclose(file); return -1; } if(compress(cbuf, &clen, fbuf, flen) != Z_OK) { printf("Compress %s failed!\n", argv[1]); return -1; } fclose(file); if((file = fopen(argv[2], "wb")) == NULL) { printf("Can\'t create %s!\n", argv[2]); return -1; } /* 保存压缩后的数据到目标文件 */ fwrite(&flen, sizeof(uLong), 1, file); /* 写入源文件长度 */ fwrite(&clen, sizeof(uLong), 1, file); /* 写入目标数据长度 */ fwrite(cbuf, sizeof(unsigned char), clen, file); fclose(file); free(fbuf); free(cbuf); return 0; }文件解压缩的时候,可以通过保留信息得到缓冲区和数据流的大小,这样解压缩后直接保存即可,参考如下代码:#include #include #include int main(int argc, char* argv[]) { FILE* file; uLong flen; unsigned char* fbuf = NULL; uLong ulen; unsigned char* ubuf = NULL; /* 通过命令行参数将srcfile文件的数据解压缩后存放到dstfile文件中 */ if(argc < 3) { printf("Usage: zudemo srcfile dstfile\n"); return -1; } if((file = fopen(argv[1], "rb")) == NULL) { printf("Can\'t open %s!\n", argv[1]); return -1; } /* 装载源文件数据到缓冲区 */ fread(&ulen, sizeof(uLong), 1, file); /* 获取缓冲区大小 */ fread(&flen, sizeof(uLong), 1, file); /* 获取数据流大小 */ if((fbuf = (unsigned char*)malloc(sizeof(unsigned char) * flen)) == NULL) { printf("No enough memory!\n"); fclose(file); return -1; } fread(fbuf, sizeof(unsigned char), flen, file); /* 解压缩数据 */ if((ubuf = (unsigned char*)malloc(sizeof(unsigned char) * ulen)) == NULL) { printf("No enough memory!\n"); fclose(file); return -1; } if(uncompress(ubuf, &ulen, fbuf, flen) != Z_OK) { printf("Uncompress %s failed!\n", argv[1]); return -1; } fclose(file); if((file = fopen(argv[2], "wb")) == NULL) { printf("Can\'t create %s!\n", argv[2]); return -1; } /* 保存解压缩后的数据到目标文件 */ fwrite(ubuf, sizeof(unsigned char), ulen, file); fclose(file); free(fbuf); free(ubuf); return 0; }

4. 手机解压软件有哪些

1、安卓解压

安卓解压是一款稳定、快速、高效的压缩与解压工具,是一款rar解压利器, 支持zip,7-zip,rar,tar等主流压缩格式,支持加密文件解压与压缩,解压中文无乱码,增加简单文件管理功能。

(4)解压缩的库扩展阅读

文件压缩率取决于多种因素,包括文件类型、文件大小和压缩方案。

对于包含大量不重复信息的文件(例如图像或MP3文件),则不能使用这种机制来获得很高的压缩率,因为它们不包含重复多次的模式。

此外文件压缩效率还取决于压缩程序使用的具体算法。有些程序能够在某些类型的文件中更好地寻找到模式,因此能更有效地压缩这些类型的文件。

其他一些压缩程序在字典中又使用了字典,这使它们在压缩大文件时表现很好,但是在压缩较小的文件时效率不高。

5. C#求推荐一款能够解压缩带密码的压缩包的类库

可以用c#调用DOS命令,使用winrara或7zip实现这个功能

6. C++中如何调用zlib.dll进行解压和压缩

1 准备工作。
下载zlib.dll。以及相关头文件。将dll文件及头文件加入工程。
2 压缩:
调用函数compress.
形式为
int compress(Byte * dest, uLong* destLen, const Byte *source, ULONG sourceLen);
功能是将source指向的空间,长度为sourceLen的数据进行压缩,压缩数据储存在dest中,长度由参数destLen返回。
如果压缩出错,返回对应错误号,否则返回0.

3解压缩:
调用函数uncompress.
形式为
int uncompress(Byte * dest, uLong* destLen, const Byte *source, ULONG sourceLen);
功能是将source指向的空间,长度为sourceLen的数据进行解压缩,解压缩后的数据储存在dest中,长度由参数destLen返回。
如果解压缩出错,返回对应错误号,否则返回0.

7. 目前都有什么压缩软件,要名称和简要介绍,谢谢

winrar,winzip这两种是最常见和常用。无论中文版还是英文版,界面都很友好,也简单,一看就会。

8. 想在linux上用C实现gzip压缩与解压缩,有没有相关库函数可以调用

linux下只支持tar.gz和tgz等格式.zip它是读取不出来的!请您先用u盘把linux系统下的文件拷贝到windows系统下进行压缩和解压处理,处理完成放到u盘里带到linux系统中,不过我不觉得linux系统会支持zip
bz2格式...
建议您用虚拟机加载linux系统

9. 高手进来一下啊!!!

不是病毒就是没用的程序

一般rar zip 格式下 游戏就压缩成安装包或者是压缩包

希望你再话点世界下个好点的

有一偏文章正好你看

游戏中如何读取压缩包文件 --------------------------------------------------------------------------------
页面地址是:http://www.ynuit.com/ynuit/2005-10-17/article_view_770.htm
--------------------------------------------------------------------

我们在市场上买了一个游戏,很少会轻易的看到游戏目录里一堆的BMP,PCX资源图片。难道他们不使用BMP之类的文件作为图片资源吗?非也,其实他们把这些资源图片进行了打包、压缩。

举几个游戏的例子吧,大名鼎鼎westernwood的《红色警戒》的.mix文件就是一种压缩包,里面包含了一堆堆的游戏图片,声音等资源。还有blizzard的《星际争霸》、《暗黑破坏神》、《魔兽系列》的.mpq文件也是一种压缩包,里面包含了各种游戏使用的资源。几乎所有的游戏都用到了压缩包。

那么为什么要使用这种压缩包呢?原因很多,首先就是压缩,游戏中使用的图片等资源都是极其适合压缩的,这样就减小了游戏的体积。如果把《红色警戒2》的资源全部解开相信会超过3G。其次压缩后文件体积的减小会带来读盘速度的显着提高。通常一个2M的BMP文件可以被压缩到700K以内,读取一个2M的文件和读取一个700K的文件然后再内存中解压的速度对比是可想而知的。最后,将大量的资源文件打包能使得游戏目录清晰,而不是一堆堆的文件夹和文件,这样能减少磁盘空间的浪费,也减少了磁盘碎片。

说了那么多压缩包的好处,我们在游戏中到底怎么使用压缩包呢?
1.我们需要定义我们自己的压缩包文件存储格式。
2.根据1我们写一个压缩工具来对游戏中的资源进行压缩存储。
3.根据1我们写一个解压缩的库以便我们游戏中使用。
4.在游戏的代码中,我们调用这个库,来读取我们包中的文件。

看到这儿,似乎我们需要做的工作还是很多、很复杂的。要定义一个文件结构,又要写压缩工具、还要写解压库。而我们真正使用确实在最后一步,而且是简单的调用一个库而已。似乎有点得不偿失了。好了,我们现在要找一条捷径来完成我们游戏使用压缩包的问题,对于1和2来说其实很好办,现成的就有很多压缩软件可以生成压缩包,winzip,winrar,winace ……都是非常好的压缩工具,这样我们不用定义压缩包的存储格式,也不用编写压缩工具。不费任何力气就完成了1和2两步。那么第3步又如何呢?文件存储格式不是我们设计的,我们无法知道文件是如何组织、如何压缩的,跟不用说知道如何压缩了。不过上网搜索一下,我们还是能得到一些winzip,winrar格式的解压缩源代码的。不过研究起这些代码来又是件痛苦的事情,更何况还要用在自己的游戏里。

到这里,我们又遇到了严峻的考验,现在我向大家隆重介绍我们的压轴法宝:MDFile文件系统。那么,MDFile是个什么东东呢?MDFile是一个可扩展的文件操作库,可以用最最简单的方法实现对任意压缩包格式内文件的读取。那么到此,我们的3和4也都可以实现了。下面我们就以MDFile为例来说以下怎么使用它来读取我们包中的文件。

首先我们先获取我们需要的MDFile库,到中国游戏开发技术咨询网上下载MDFile库,点击本站原创,找到MDFile并下载下来。

将库放到你的工程中,并设置好,这里我就不详细说如何设置一个外部的库了,如果不会的话你可以参考相关的书。好了,下面我们就开始我们的代码了,这里以读取test.zip中的一个test.txt文件为例:

我们在程序中添加一个LoadFile的函数来载入一个包里的文件。
bool LoadFile(char* filename,char* packfile)

BYTE* buf=NULL; // 用来存放读取出的文件的内容
CMD_File cmdfile(“ZipExt.dll”); // 我们先生成一个实例
cmdfile.Open(“test.zip”,true,true); // 打开test.zip这个压缩包
cmdfile.Locate(“test.txt”); // 定位到test.txt文件
buf=new BYTE[cmdfile.GetLength()];// 根据test.txt的大小分配内存
cmdfile.Read(buf); // 读取文件到我们的内存中
至此,buf中已经存储了我们需要的test.zip中的test.txt文件的内容了
是不是很简单呢?
细心的朋友可能已经注意到了,CMD_File cmdfile(“ZipExt.dll”);

这个初始化是什么意思呢?就是用ZipExt.dll这个扩展库来打开我们的test.zip文件,因为MDFile本身并不支持Zip格式,他支持内部的一种叫epk的压缩包格式,为了让他支持Zip你必须获得ZipExt.dll这个扩展库,同样的如果你需要Rar支持你需要获得RarExt.dll这个扩展库。好在我们刚下载的MDFile包中已经包括了一个ZipExt.dll(在Sample\Sample4\Release中),也好在@J--S Studio在不停的开发MDFile的扩展库,以便我们能够使用更多的压缩包格式。

需要一提的是:使用这些现成的压缩软件制作文件包虽然简单,但是也有很多问题,例如安全性,有时候我们不想被其他人看到游戏中用到的资源,这时如果我们用的是Zip格式,那就可能轻易的被别人解开并修改了。这时,其实使用MDFile内部的epk格式就比较好,他使用动态加密技术,同时epk格式不被其他压缩软件支持,另外他的其他一些特性都是非常不错的。同时为了支持epk格式,他还提供了一个JSFilePacker程序用来打包需要的文件并存成epk格式。所有的这些都可以在我们下载的MDFile中得到。  (JSFilePacker在tools下)

立即下载MDFile库 http://dev.gameres.com/Program/Other/MDFile.zip

10. 有没有会使用zlib库解压zip包的

bool unzip(const char *DestName, const char *SrcName) { //解压缩文件时的源buffer char* uSorceBuffer = new char[1024*1024*2]; memset(uSorceBuffer,0,sizeof(char)*1024*1024*2); FILE* fp3; //打开欲解压文件的文件指针 FILE* fp4; //创...

热点内容
微信qq音乐缓存 发布:2025-05-14 16:16:16 浏览:468
c语言回收内存 发布:2025-05-14 16:16:08 浏览:143
2021国产安卓顶级旗舰买哪个 发布:2025-05-14 16:15:36 浏览:300
linux自学视频 发布:2025-05-14 16:14:49 浏览:255
我的世界服务器崩了重启 发布:2025-05-14 16:09:37 浏览:44
android深拷贝 发布:2025-05-14 16:09:35 浏览:153
cf电脑版转服务器神器还在吗 发布:2025-05-14 16:09:02 浏览:211
百度文库服务器如何搭建 发布:2025-05-14 16:09:00 浏览:248
安卓微信删除的好友怎么找回 发布:2025-05-14 16:08:56 浏览:706
iphone的访问限制密码忘记了怎么办 发布:2025-05-14 16:08:56 浏览:184