当前位置:首页 » 文件管理 » zlib压缩文件

zlib压缩文件

发布时间: 2022-05-10 03:03:21

Ⅰ 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.

Ⅱ 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;
}

Ⅲ 在VC中如何使用zlib解压缩文件

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.

python中如何对文件进行 zlib压缩

文件读取以后也是一个大的字符串,整个一起压缩就可以了。

示例:

fin=open('in.txt','r')
fout=open('out.txt','w')
str=fin.read()
//compressstr
fout.write(compressed_str)
fout.close()
fin.close()

Ⅳ 如何用zlib将很多文件或一个文件夹压缩

新建一个文件夹,把需要压缩的东西拖到新建文件夹里,然后对着文件夹点右键,选择添加到压缩文件或者其他压缩命令,在弹出的界面里点击确定

Ⅵ 如何发挥zlib压缩解压的最大效

首先说明,这里不是横向比较zlib与别的引擎(rar,leo,powerarc...),是探索如何发挥zlib压缩/解压的最大效率。
先看看如下代码在效率上的差异:
var MS:TMemoryStream;(1):begin MS:=TMemoryStream.Create; MS.Size:=$400000;//4M------------------------------------------------(2):var i:integer;begin MS:=TMemoryStream.Create; for i:=1 to 1024 do MS.Size:=MS.Size+4096;

你会发现,方法(1)只要1个毫秒,方法(2)却要20秒。
因此,如果把解压缩程序写成下面这样,会非常没有效率:
procere ZlibDeCompress(instream,outStream:TStream);var ACS:TDeCompressionStream; buf:array[1..4096] of byte; numread:integer;begin inStream.Position:=0; ACS:=TDeCompressionStream.Create(inStream); try repeat numRead:=ACS.Read(buf,sizeof(buf)); if numread>0 then outStream.Write(buf,numRead); until (numRead=0); finally ACS.Free; end;end;

如果我们知道原始资料的大小,一次确定outStream.Size,效率就可以提高几十倍。方法很简单,我们可以在压缩时,把原始资料的Size写在压缩Stream的头部,如,写一个LongWord的大小,解压时就可以先读出Size,因此,最有效率的解压程序为:
procere ZlibDecompressStream2(Source,Dest:TMemoryStream);var zstream: TZStreamRec; SourceLen,DestLen:LongWord;begin FillChar(zstream,SizeOf(TZStreamRec),0); SourceLen:=Source.Size; Source.Position:=0; Source.Read(DestLen,SizeOf(LongWord)); Dest.Size:=DestLen; zstream.next_in:=Pointer(LongWord(Source.Memory)+SizeOf(LongWord)); zstream.avail_in:=SourceLen-SizeOf(LongWord); zstream.next_out:=Dest.Memory; zstream.avail_out:=DestLen; ZDecompressCheck(InflateInit(zstream)); try ZDecompressCheck(inflate(zstream,Z_NO_FLUSH)); finally ZDecompressCheck(inflateEnd(zstream)); end;end;

用一个4M的文件试试,效率提高近70倍。
同样道理,在压缩的时候,如果能预先知道压缩后的大小,也能提高效率不少,但这似乎是不可能的,也不能盲目的给outStream.Size一个"足够大"的数值,只能按引擎的原理估算一个最接近的数值,zlib推荐的为:
((SourceLen+(SourceLen div 10)+12)+255) and not 255
因此,最有效率的压缩程序为:
procere ZlibCompressStream2(Source,Dest:TMemoryStream; CompressLevel:TZCompressi);var zstream: TZStreamRec; SourceLen,DestLen:LongWord;begin FillChar(zstream,SizeOf(TZStreamRec),0); SourceLen:=Source.Size; DestLen:=SizeOf(LongWord)+((SourceLen+(SourceLen div 10)+12)+255) and not 255; Dest.Size:=DestLen; Dest.Position:=0; Dest.Write(SourceLen,Sizeof(LongWord)); zstream.next_in:=Source.Memory; zstream.avail_in:=SourceLen; zstream.next_out:=Pointer(LongWord(Dest.Memory)+SizeOf(LongWord)); zstream.avail_out:=DestLen-SizeOf(longWord); ZCompressCheck(DeflateInit(zstream,ZLevels[CompressLevel])); try ZCompressCheck(deflate(zstream,Z_FINISH)); finally ZCompressCheck(deflateEnd(zstream)); end; Dest.Size:=zstream.total_out+SizeOf(LongWord);end;

Ⅶ 我要使用zlib库压缩文件,例如word文档,png图片等,那要用哪一个函数呢compress函数只能压缩里面的内容!

如果有足够的缓存,可以一次性地压缩整个文件,这时候使用compress()压缩,如果缓存比较小,使用defalate()函数在循环里面压缩.

Ⅷ 如何使用Zlib解压内存块中的文件

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.

Ⅸ 关于zlib解压缩的问题~

压缩与解压缩的时候,分别有2个不同的版本,分别是safe和普通的版本。2个版本要对应起来。

你在解压缩的时候,注意缓冲区大小了吗?缓冲区够用了吗?在压缩前,保存一下这个压缩前的原始的长度,然后解压前,分配一块至少这么大的内存。

你实际调试过吗?比如,你可以先去掉文件IO的过程,只是对一个字符串进行压缩/解压,然后看看是否正确;然后再加上文件IO,看看存取的过程是否正确。压缩后的文件应该以二进制方式打开对吧。

热点内容
emc存储图标 发布:2024-11-19 05:39:03 浏览:646
查询电脑主板配置怎么看 发布:2024-11-19 05:33:10 浏览:464
苹果手机怎么查看wifi密码 发布:2024-11-19 05:26:57 浏览:498
上级服务器ip英语 发布:2024-11-19 05:24:43 浏览:329
数据库是数 发布:2024-11-19 05:16:55 浏览:188
linux线程id 发布:2024-11-19 05:05:36 浏览:428
云堡垒服务器 发布:2024-11-19 05:05:31 浏览:340
php高端培训 发布:2024-11-19 05:04:11 浏览:974
源码智慧路灯 发布:2024-11-19 05:02:33 浏览:635
天翼生活登录密码是什么 发布:2024-11-19 04:51:30 浏览:96