開源**:
zlib使用手冊:manual.html
zlib wince版:
在這裡,你可以檢視基於各種作業系統平台的壓縮與解縮**實現。
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
以下是經過測試的 wince 及 winxp 下的**
<<<<<<<<
第三步: 包含標頭檔案
#include "zlib.h"
主要使用fopen等c標準介面實現的,只用到zlib的compress()和uncompress()介面;裡面的條件編譯是針對pc和wce的
封裝的類:
class czlib
;介面實現:
壓縮
int czlib::compress(char * destname,constchar *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);
return0;
}
解壓
int czlib::uncompress(char * destname,constchar *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);
return0;
}
測試**:
test.compress("1.zip","test.docx");
test.uncompress("11.docx","1.zip");
上述**對於大檔案就不適合了,因為是一次讀出,一次寫入的,下面是針對大檔案的改進,分批讀,分批寫,**如下:
wf_error czlib::compress(constchar * 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檔案壓縮和解壓 開源 http www.zlib.net zlib使用手冊 http www.zlib.net manual.html zlib wince版 http www.tenik.co.jp adachi wince 在這裡,你可以檢視基於各種作業系統平台的壓縮與解縮 實現。以下是...
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...
檔案壓縮和解壓
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...