Zlib解压/压缩实现

针对目前2503平台,请参考以下方式实现zlib解压/压缩文件:

1:将plutommi\Customer\ResGenerator\zlib整个文件夹copy到贵司的module文件中。(以browser为例,将整个zlib文件夹copy到plutommi\mmi\BrowserApp路径下)

2:将zlib文件下的source和include文件添加到对应的make文件保证能够正常编译link。(将源文件和头文件添加到make\plutommi\inet_app\inet_app.mak)

3:在贵司模块中添加如下函数实现:
//定义全局变量,客户若选择动态申请内存方式,此过程可略过
#define MAX_ZIP_BUFFER_LENGTH 5*1024
//static unsigned char sbuf[6];//source buffer point
//static unsigned char dbuf[12];//dest buffer point
static unsigned char sbuf[MAX_ZIP_BUFFER_LENGTH];//source buffer point
static unsigned char dbuf[MAX_ZIP_BUFFER_LENGTH];//dest buffer point

static unsigned char usbuf[MAX_ZIP_BUFFER_LENGTH];//source buffer point
static unsigned char udbuf[MAX_ZIP_BUFFER_LENGTH];//dest buffer point

//压缩文件实现

static kal_int32 Compress2file(WCHAR* DestName,const WCHAR* SrcName)
{
FS_HANDLE s_fd;//compressed file handle
FS_HANDLE d_fd;//decompresses file handle
U32 slen = 0;//source length
U32 dlen =0 ;//dest length
U32 read_size,write_size;
U32 ret;

//open source file
s_fd = FS_Open((const WCHAR*)SrcName,FS_READ_WRITE);
if(s_fd<0)
{
kal_prompt_trace(MOD_MMI,"open compress source file fail!");
return -1;
}

//get source file length
FS_GetFileSize(s_fd,&slen);

kal_prompt_trace(MOD_MMI,"sizeof(unsigned char)=%d",sizeof(unsigned char));

//read data to buffer
FS_Read(s_fd,sbuf,slen,&read_size);

kal_prompt_trace(MOD_MMI,"read_size = %d,sbuf = %s",read_size,sbuf);

FS_Close(s_fd);

//compress data
dlen = compressBound(slen); /*get compressed length*/

if(compress(dbuf,&dlen,sbuf,slen)!= Z_OK)
{
kal_prompt_trace(MOD_MMI,"compress fail!");
return -1;
}

//open dest file name
d_fd = FS_Open((const WCHAR*)DestName,FS_READ_WRITE | FS_CREATE_ALWAYS);

if(d_fd<0)
{
kal_prompt_trace(MOD_MMI,"open compress dest file fail!");
return -1;
}

/*save dest buffer data to dest file*/
ret = FS_Write(d_fd,dbuf, dlen, & write_size);
kal_prompt_trace(MOD_MMI,"write_size = %d,dbuf = %s,ret = %d",write_size,dbuf,ret);

FS_Close(d_fd);
return 0;
}

//解压文件实现
static kal_int32 Uncompress_file(WCHAR* DestName,const WCHAR* SrcName)
{
FS_HANDLE s_fd;//uncompressed file handle
FS_HANDLE d_fd;//undecompresses file handle
U32 uslen = 0;//source length
U32 udlen = 0 ;//dest length
U32 read_size,write_size;

//open source file
s_fd = FS_Open((const WCHAR*)SrcName,FS_READ_WRITE);
if(s_fd<0)
{
kal_prompt_trace(MOD_MMI,"open uncompress source file fail!");
return -1;
}

//get source file length
FS_GetFileSize(s_fd,&uslen);

//read data to buffer
FS_Read(s_fd,usbuf,uslen,&read_size);

kal_prompt_trace(MOD_MMI,"read_size = %d,usbuf = %s",read_size,usbuf);

FS_Close(s_fd);

udlen = uslen*2;
if(uncompress(udbuf,&udlen,usbuf,uslen)!= Z_OK)
{
kal_prompt_trace(MOD_MMI,"uncompress fail!");
return -1;
}

//open dest file name
d_fd = FS_Open((const WCHAR*)DestName,FS_READ_WRITE | FS_CREATE_ALWAYS);

if(d_fd<0)
{
kal_prompt_trace(MOD_MMI,"open uncompress dest file fail!");
return -1;
}

/*save dest buffer data to dest file*/
FS_Write(d_fd,udbuf, udlen, & write_size);
kal_prompt_trace(MOD_MMI,"write_size = %d,udbuf = %s",write_size,udbuf);

FS_Close(d_fd);

return 0;
}

//测试demo

void main()
{
WCHAR SrcName[SRV_FMGR_PATH_MAX_LEN+1] = L"sample.txt";
WCHAR DestName[SRV_FMGR_PATH_MAX_LEN+1] = L"sample.zip";
WCHAR ufileName[SRV_FMGR_PATH_MAX_LEN+1] = L"sample_un.txt";
kal_int32 ret;
kal_int32 result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/

//ret = compress2zip();

ret = Compress2file((WCHAR*)DestName, (const WCHAR*)SrcName);
if(ret==0)
{
kal_prompt_trace(MOD_MMI,"compress fail!");
}
else
{
kal_prompt_trace(MOD_MMI,"compress success!");
}

result = Uncompress_file((WCHAR *)ufileName,(const WCHAR *)DestName);
}

note:目前zlib只能实现通过函数实现来完成解压/压缩,解压后的文件并不能直接通过PC tool解压,只能通过配套的uncompress去做解压,这个zlib官网的FAQ是有解答的。

Zlib解压/压缩实现相关推荐

  1. python批量解压文件_python 批量解压压缩文件的实例代码

    下面给大家介绍python 批量解压压缩文件的实例代码,代码如下所述: #/usr/bin/python#coding=utf-8import os,sys import zipfile open_p ...

  2. R语言使用unzip函数解压压缩文件(Extract or List Zip Archives)

    R语言使用unzip函数解压压缩文件(Extract or List Zip Archives) 目录 R语言使用unzip函数解压压缩文件(Extract or List Zip Archives) ...

  3. linux 文件解压 压缩

    解压 压缩 压缩包格式 解压命令 *.tar tar -xvf *.gz gzip -d 或 tar -xzf *.tar.gz 和 .tgz tar -xzf *.bz2 bzip2 -d 或 bu ...

  4. Linux下各压缩工具的解压压缩命令

    Linux下各压缩工具的解压压缩命令 FileName 代表文件,DirName 代表目录,DirName/* 代表目录及子目录 tar命令 解包:tar xvf FileName.tar 打包:ta ...

  5. MyZip Mac一秒超快速解压/压缩

    MyZip for Mac软件介绍 MyZip Mac版是Mac电脑上的一款最优秀.好用的解压神器.MyZip Mac版是一款全新设计,全新体验的解压工具. MyZip Mac版是一款全面,好用的解压 ...

  6. lz4 安装 解压/压缩

    为什么80%的码农都做不了架构师?>>>    安装: 网上都是下载编译好的可执行文件or apt-get 软件源安装,为了不那么麻烦,直接用源码安装~是的源码安装比apt-get更 ...

  7. c# Byte解压,压缩

    using ICSharpCode.SharpZipLib.GZip; using System; using System.Collections.Generic; using System.IO; ...

  8. php tp5在线解压压缩文件

    php tp5在线解压压缩文件 没啥原理,直接上代码把 解压方法 /*** 解压zip文件到指定目录* @param {string} $filepath: 文件路径* @param {string} ...

  9. winrar解压器_你真的很需要一个解压压缩软件

    电脑必备软件当中,有一款你一定逃不掉,那就是解压压缩软件.在很多时候我们需要用到,但又很多时候,有的人没有安装,或者体验很不好,有广告,慢等.今天给大家推荐一款极其好用,极其简洁的压缩软件.它就是Ba ...

最新文章

  1. android技术内幕心得
  2. 使用异步 I/O 大大提高应用程序的性能
  3. 104. 二叉树的最大深度 golang
  4. IE浏览器 对 jquery版本的兼容性 支持
  5. 数据库 Oracle数据库对象二
  6. 没有找到站点_为了在家Coding,我搜集了海量的远程站点,然而...
  7. 如何整理写作思路?MindManager在文章写作方面的应用
  8. linux流量监控php_Linux下安装vnstat流量统计,流量监控
  9. 转载--numpy中的ravel()、flatten()、squeeze()的用法与区别
  10. 关于BPSK、QPSK的一些理解,以及MATLAB实现
  11. 如何解决卸载驱动之后又重新装的问题
  12. 使用Vim/Neovim编辑二进制文件
  13. 【进阶】QQ聊天机器人--群聊机器人篇
  14. Pyqt walk 在Windows查找文件
  15. jle汇编_X86汇编指令
  16. Python 去除单色背景
  17. P9065 [yLOI2023] 云梦谣 题解
  18. 未转变者服务器车怎么得,未转变者刷车指令大全 | 手游网游页游攻略大全
  19. 网页中播放RTSP(5) WebSocket播放视频
  20. matlab计算连续复利,求连续复利计算公式。。。

热门文章

  1. oracle 行数大于一时,oracle – PL / SQL ORA-01422:精确的提取返回超过请求的行数
  2. 单一课和综合课的划分依据_缠论108课第105课:股票的操作中远离小聪明,保持机械性的操作...
  3. 线性表之简介及顺序表
  4. pthread_mutex_init函数《代码》
  5. ROS: global_planner 整体解析
  6. linux内核 panic,linux 内核 panic
  7. SpringMVC 阶段总结
  8. IDEA中Spring智能提示,XML Configuration File中spring config
  9. Spring Boot 笔记汇总
  10. 一切都是对象,一切都是指针,一切都是东西(python的编程哲学)