zlib檔案壓縮和解壓
開源**:http://www.zlib.net/
zlib使用手冊:http://www.zlib.net/manual.html
zlib wince版:http://www.tenik.co.jp/~adachi/wince/
在這裡,你可以檢視基於各種作業系統平台的壓縮與解縮**實現。
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
以下是經過測試的 wince 及 winxp 下的**
<<<<<<<<
winxp: 解壓縮後開啟zlib-1.2.3/projects/visualc6/zlib.dsw,選擇win32 lib release 按f7編繹生成zlib.lib, zlib.dll.
<<<<<<<<
第二步: 建立evc 或者 vs2005 的對話方塊工程.
在工程中新增以下檔案:zlib.h, zconf.h, zlib.lib, zlib.dll (或者 zlibce.dll);
<<<<<<<<
第三步: 包含標頭檔案
#include "zlib.h"
主要使用fopen等c標準介面實現的,只用到zlib的compress()和uncompress()介面;裡面的條件編譯是針對pc和wce的
封裝的類:
class czlib
;介面實現:
壓縮int czlib::compress(char * destname,const char *srcname)
; //壓縮檔案時的源buffer
file* fp; //開啟欲壓縮檔案時檔案的指標
file* fp1; //建立壓縮檔案時的指標
errno_t err; //錯誤變數的定義
#ifdef windows_platform
err = fopen_s(&fp,srcname,"r+b");//開啟欲壓縮的檔案
if(err)
#endif
#ifdef windows_ce_platform
fp = fopen_s(srcname,"r+b");//開啟欲壓縮的檔案
if(fp)
#endif
//獲取檔案長度
long cur = ftell(fp);
fseek(fp,0l,seek_end);
long filelength = ftell(fp);
fseek(fp,cur,seek_set);
//讀取檔案到buffer
fread(sourcebuffer,filelength,1,fp);
fclose(fp);
//壓縮buffer中的資料
ulongf sourcebufferlen=102400;
char* destbuffer=(char*)::calloc((uint)sourcebufferlen, 1);
err=compress((bytef*)destbuffer,(ulongf*)&sourcebufferlen,(const bytef*)sourcebuffer,(ulongf)filelength);
if(err!=z_ok)
//建立乙個檔案用來寫入壓縮後的資料
err = fopen_s(&fp1, destname,"w+b");
if(!fp1)
fwrite(destbuffer,sourcebufferlen,1,fp1);
fclose(fp1);
return 0;}解壓
int czlib::uncompress(char * destname,const char *srcname)
; //解壓縮檔案時的源buffer
file* fp3; //開啟欲解壓檔案的檔案指標
file* fp4; //建立解壓檔案的檔案指標
errno_t err; //錯誤變數的定義
//開啟欲解壓的檔案
err = fopen_s(&fp3,srcname,"r+b");
if(err)
//獲取欲解壓檔案的大小
long ucur = ftell(fp3);
fseek(fp3,0l,seek_end);
long ufilelength = ftell(fp3);
fseek(fp3,ucur,seek_set);
//讀取檔案到buffer
fread(usorcebuffer,ufilelength,1,fp3);
fclose(fp3);
ulongf udestbufferlen=1024000;//此處長度需要足夠大以容納解壓縮後資料
char* udestbuffer=(char*)::calloc((uint)udestbufferlen, 1);
//解壓縮buffer中的資料
err=uncompress((bytef*)udestbuffer,(ulongf*)&udestbufferlen,(bytef*)usorcebuffer,(ulongf)ufilelength);
if(err!=z_ok)
//建立乙個檔案用來寫入解壓縮後的資料
err = fopen_s(&fp4,destname,"wb");
if(err)
printf("寫入資料... /n");
fwrite(udestbuffer,udestbufferlen,1,fp4);
fclose(fp4);
return 0;
}測試**:
test.compress("1.zip","test.docx");
test.uncompress("11.docx","1.zip");
上述**對於大檔案就不適合了,因為是一次讀出,一次寫入的,下面是針對大檔案的改進,分批讀,分批寫,**如下:
wf_error czlib::compress(const char * destname,const char *srcname)
/gzfile out = gzopen(destname,"wb6f");
if(out == null)
for(;;)
if(len == 0) break;
if(gzwrite(out, buf, (unsigned)len) != len)
}gzclose(out);
fclose(fp_in);
return re;
}wf_error czlib::uncompress(const char * destname,const char *srcname)
if(null == (fp_out = fopen(destname,"wb")))
for (;;)
if(len == 0) break;
if(fwrite(buf,1,(unsigned)len,fp_out)!=len)
}fclose(fp_out);
gzclose(in);
return re;
}
充電 庫 Zlib檔案壓縮和解壓
開源 zlib使用手冊 manual.html zlib wince版 在這裡,你可以檢視基於各種作業系統平台的壓縮與解縮 實現。以下是經過測試的 wince 及 winxp 下的 第三步 包含標頭檔案 include zlib.h 主要使用fopen等c標準介面實現的,只用到zlib的compre...
檔案壓縮和解壓
1.zip命令 zip r a.zip a 將a資料夾壓縮成a.zip zip r abcdef.zip abc def.txt 這句命令的意思是將資料夾abc和檔案def.txt壓縮成乙個壓縮包abcdef.zip 2.unzip命令 unzip mysql.zip 在當前目錄下直接解壓mysql...
zlib庫的使用,可以壓縮和解壓資料夾
源 ziphelper.h pragma once ifndef zip h define zip h include include include include include include zlib unzip.h include using namespace std class cpa...