❶ 如何用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;
}