/*
× zlib庫compress和uncompress函數的使用,
× 程序可以獨立完成簡單的文件壓縮功能
××××××××××××××××××××××××××××××××××××××××××××××××
× 用法:z_compress 源文件名 目標文件名××××××××××
××××××××××××××××××××××××××××××××××××××××××××××××
× 目標文件:源文件長度+壓縮后數據長度+壓縮數據××
××××××××××××××××××××××××××××××××××××××××××××××××
*/
#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: z_compress 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;
}
zlib - compress函數
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 使用Object-C代碼來實現gzip的壓縮功能,不管網上找的哪個地方的代碼,方法都是一樣的 https://gi...