❶ 如何用VC++来调用zlib库压缩文件夹(对VC一窍不通。。求超详细教程)
用WinZip压缩文件夹不就可以了吗。
❷ delphi中用zlib怎样压缩和解压
数据压缩和卖巧知解压的示例代码:
{压缩流}
function CompressStream(ASrcStream: TStream; ALevel: TSfCompressionLevel): TStream;
var
SrcData,Buffer:Pointer;
BufSize:Integer;
begin
Buffer:=nil;
Result:=nil;
BufSize:=0;
GetMem(SrcData,ASrcStream.Size);
ASrcStream.Position:=0;
ASrcStream.Read(SrcData^,ASrcStream.Size);
try
try
SfCompressBuf(SrcData,ASrcStream.Size,Buffer,BufSize,ALevel);
except
on E:Exception do
SfRaiseException(E,'Exception raised in CompressStream call');
end;
finally
FreeMem(SrcData);
SrcData:=nil;
end;
//由于try...except块中重引发了异常,所以在发生了异常的情况下,以下的代码不会执行
Result:=TMemoryStream.Create;
Result.Write(Buffer^,BufSize);
FreeMem(Buffer);
end;
{解压流}
function CompressStream(ASrcStream: TStream; ALevel: TSfCompressionLevel): TStream;
var
SrcData,Buffer:Pointer;
BufSize:Integer;
begin
Buffer:=nil;
Result:=nil;
BufSize:=0;
GetMem(SrcData,ASrcStream.Size);
ASrcStream.Position:=0;
ASrcStream.Read(SrcData^,ASrcStream.Size);
try
try
SfCompressBuf(SrcData,ASrcStream.Size,Buffer,BufSize,ALevel);
except
on E:Exception do
SfRaiseException(E,'Exception raised in CompressStream call');
end;
finally
FreeMem(SrcData);
SrcData:=nil;
end;
//由于try...except块中重引发了异常,所以宽键在发生了异常的情况下,以下的代码不中消会执行
Result:=TMemoryStream.Create;
Result.Write(Buffer^,BufSize);
FreeMem(Buffer);
end;
{压缩字节数组}
function CompressBytes(ASrcBytes: TBytes; ALevel: TSfCompressionLevel): TBytes;
var
Buffer:Pointer;
BufSize:Integer;
begin
Buffer:=nil;
BufSize:=0;
try
SfCompressBuf(@ASrcBytes[0],Length(ASrcBytes),Buffer,BufSize,ALevel);
SetLength(Result,BufSize);
Move(Buffer^,Result[0],BufSize);
except
on E:Exception do
SfRaiseException(E,'Exception raised in CompressBytes call');
end;
//由于try...except块中重引发了异常,所以在发生了异常的情况下,以下的代码不会执行
FreeMem(Buffer);
end;
{解压字节数组}
function DecompressBytes(ASrcBytes: TBytes): TBytes;
var
Buffer:Pointer;
BufSize:Integer;
begin
Buffer:=nil;
BufSize:=0;
try
SfDecompressBuf(@ASrcBytes[0],Length(ASrcBytes),0,Buffer,BufSize);
SetLength(Result,BufSize);
Move(Buffer^,Result[0],BufSize);
except
on E:Exception do
SfRaiseException(E,'Exception raised in DecompressBytes call');
end;
//由于try...except块中重引发了异常,所以在发生了异常的情况下,以下的代码不会执行
FreeMem(Buffer);
end;
❸ 如何在linux平台下使用C++语言实现多文件的压缩解压缩(使用zlib依赖库)必重谢!
由于Unix系一贯坚持功能分离,所以通常是先tar再gzip来完成多文件一次压缩。
开发中一般是借助zlib-X.X.X.tar.gzzlib-X.X.X.tarzlib-X.X.Xcontribminizip实例中的接口:
ZLib可能并不是一个针对ZIP文件的库,它只是一个针对gzip以及deflate算法的库。它提供了一个叫做minizip
(contribminizip)例子来给出操作ZIP文件的方法。下文将从ZLib出发,归结出两个傻瓜接口:BOOLZipCompress(LPCTSTRlpszSourceFiles,LPCTSTRlpszDestFile);
BOOLZipExtract(LPCTSTRlpszSourceFile,LPCTSTRlpszDestFolder);
要引入的源文件
ZLib主目录下的代码,除minigzip.c、example.c外;
contribminizip下的代码,除minizip.c、miniunz.c外。
相关API
虽
然minizip更像是个例子,但是除去其主程序minizip.c和miniunz.c后,剩下的部分我们可以看作是ZLib
的一个上层库,它封装了与ZIP文件格式相关的操作。而minizip.c和miniunz.c
就是我们要改写的——把它从命令行程序改为上述傻瓜接口。minizip.c和miniunz.c中用到的API主要有:
压缩相关:
zipOpen64
zipClose
zipOpenNewFileInZip
zipCloseFileInZip
zipWriteInFileInZip
解压相关:
unzOpen64
unzClose
unzGetGlobalInfo64
unzGoToNextFile
unzGetCurrentFileInfo64
unzOpenCurrentFile
unzCloseCurrentFile
unzReadCurrentFile
想必看到这些名字都能猜到怎么用了吧。好的接口果然能带给人愉悦的。minizip中的这些函数有的是带“64”的有的是不带的,有的还有“2”、“3”、“4”版本。这里一律用带64的,不带“2”、“3”、“4”的。
来源参考:http://www.cppblog.com/Streamlet/archive/2010/09/22/127368.html
❹ 关于使用 Zlib + minizip 解压带有密码的 zip 文件
这里只说 Zlib 在 Windows 上的编译. Linux/Mac 上的不再本次考虑范围内.
使用zlib库解压*.zip文件
❺ png格式的图片怎么样压缩,要求压缩后格式不变,图片质量损失小,要用到那些软件
png压缩大小可以用这个在线图片压缩工具,想把png图片文件的大小减到多少都行,比如你直接设置一下压缩数值到500Kb,马上瞬间就能把图片的文件大小压缩到500Kb搞定,你设定压缩到多少kb,他压缩完输出的图片就是多少kb,非常快捷。在线智能压缩图片大小,图片压缩体积
在线图片智能压缩使用步骤:
一、首先点击加号添加需要压缩的图片。目前已知支持对jpg、png等多种常见的图片格式进行压缩,如果上传图片并压缩成功,则代表支持该图片格式。
二、可以自行修改图片需要被压缩到的最大宽高尺寸,默认为图片原始的宽高尺寸,且宽高比例是自动锁定的。
三、必须设置图片被压缩后,期望输出的图片文件的最大占用空间。(必填项)
四、选择图片生成的算法。默认为混合优先算法,绝大多数情况下使用默认算法即可。
五、压缩的设定值不能小于1Kb,但图片压缩的最终效果可以小于1Kb。
butterpig
❻ 关于zlib解压缩的问题~
压缩与解压缩的时候,分别有2个不同的版本,分别是safe和普通的版本。2个版本要对应起来。
你在解压缩的时候,注意缓冲区大小了吗?缓冲区够用了吗?在压缩前,保存一下这个压缩前的原始的长度,然后解压前,分配一块至少这么大的内存。
你实际调试过吗?比如,你可以先去掉文件IO的过程,只是对一个字符串进行压缩/解压,然后看看是否正确;然后再加上文件IO,看看存取的过程是否正确。压缩后的文件应该以二进制方式打开对吧。
❼ 怎么用zlib生成标准zip压缩文件和解压缩zip文件
你用的是什么压缩软件?7-Zip? rar是Winrar的私有格式,其它压缩软件通常只能打开和解压缩,而不能生成(否则必须得到Winrar的授权)。 其它你用7z格式就可以了,Winrar等都可以打开7z(7-Zip是开源软件)。你发给别人7z格式,他不论装什么压缩.
❽ 如何用zlib将很多文件或一个文件夹压缩
新建一个文件夹,把需要压缩的东西拖到新建文件夹里,然后对着文件夹点右键,选择添加到压缩文件或者其他压缩命令,在弹出的界面里点击确定
❾ 易语言怎么调用zlib的deflate压缩
先来看看zlib都提供了那些函数,都在zlib.h中,看到一堆宏不要晕,其实都是为了兼容各种编译器和一些类型定义.死死抓住那些主要的函数的原型声明就不会受到这些东西的影响了.关键的函数有那么几个:(1)intcompress(Bytef*dest,uLongf*destLen,constBytef*source,uLongsourceLen);把源缓冲压缩成目的缓冲,就那么简单,一个函数搞定(2)intcompress2(Bytef*dest,uLongf*destLen,constBytef*source,uLongsourceLen,intlevel);功能和上一个函数一样,都一个参数可以指定压缩质量和压缩数度之间的关系(0-9)不敢肯定这个参数的话不用太在意它,明白一个道理就好了:要想得到高的压缩比就要多花时间(3)uLongcompressBound(uLongsourceLen);计算需要的缓冲区长度.假设你在压缩之前就想知道你的产度为sourcelen的数据压缩后有多大,可调用这个函数计算一下,这个拿睁函数并不能得到精确的结果,但是它可以保证实际输出长度肯定小于它计算出来的长度(4)intuncompress(Bytef*dest,uLongf*destLen,constBytef*source,uLongsourceLen);解压缩(看名字就知道了:)(5)deflateInit()+deflate()+deflateEnd()3个函数结合使用完成压缩功能,具体用法看example.c的test_deflate()函数.其实compress()函数内部就是用这3个函数实现的(工程zlib的compress.c文件)(6)inflateInit()+inflate()+inflateEnd()和(5)类似,完成解压缩功能.(7)gz开头的函数.用来操作*.gz的文件,和文件stdio调用方式类似.想知道怎么用的话看example.c的test_gzio()函数,很easy.(8)其他诸如获得版本等闭备函数就不说了.总结:其消态岁实只要有了compress()和uncompress()两个函数,在大多数应用中就足够了.
❿ 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;
}