Zlib解压/压缩实现
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解压/压缩实现相关推荐
- python批量解压文件_python 批量解压压缩文件的实例代码
下面给大家介绍python 批量解压压缩文件的实例代码,代码如下所述: #/usr/bin/python#coding=utf-8import os,sys import zipfile open_p ...
- R语言使用unzip函数解压压缩文件(Extract or List Zip Archives)
R语言使用unzip函数解压压缩文件(Extract or List Zip Archives) 目录 R语言使用unzip函数解压压缩文件(Extract or List Zip Archives) ...
- linux 文件解压 压缩
解压 压缩 压缩包格式 解压命令 *.tar tar -xvf *.gz gzip -d 或 tar -xzf *.tar.gz 和 .tgz tar -xzf *.bz2 bzip2 -d 或 bu ...
- Linux下各压缩工具的解压压缩命令
Linux下各压缩工具的解压压缩命令 FileName 代表文件,DirName 代表目录,DirName/* 代表目录及子目录 tar命令 解包:tar xvf FileName.tar 打包:ta ...
- MyZip Mac一秒超快速解压/压缩
MyZip for Mac软件介绍 MyZip Mac版是Mac电脑上的一款最优秀.好用的解压神器.MyZip Mac版是一款全新设计,全新体验的解压工具. MyZip Mac版是一款全面,好用的解压 ...
- lz4 安装 解压/压缩
为什么80%的码农都做不了架构师?>>> 安装: 网上都是下载编译好的可执行文件or apt-get 软件源安装,为了不那么麻烦,直接用源码安装~是的源码安装比apt-get更 ...
- c# Byte解压,压缩
using ICSharpCode.SharpZipLib.GZip; using System; using System.Collections.Generic; using System.IO; ...
- php tp5在线解压压缩文件
php tp5在线解压压缩文件 没啥原理,直接上代码把 解压方法 /*** 解压zip文件到指定目录* @param {string} $filepath: 文件路径* @param {string} ...
- winrar解压器_你真的很需要一个解压压缩软件
电脑必备软件当中,有一款你一定逃不掉,那就是解压压缩软件.在很多时候我们需要用到,但又很多时候,有的人没有安装,或者体验很不好,有广告,慢等.今天给大家推荐一款极其好用,极其简洁的压缩软件.它就是Ba ...
最新文章
- android技术内幕心得
- 使用异步 I/O 大大提高应用程序的性能
- 104. 二叉树的最大深度 golang
- IE浏览器 对 jquery版本的兼容性 支持
- 数据库 Oracle数据库对象二
- 没有找到站点_为了在家Coding,我搜集了海量的远程站点,然而...
- 如何整理写作思路?MindManager在文章写作方面的应用
- linux流量监控php_Linux下安装vnstat流量统计,流量监控
- 转载--numpy中的ravel()、flatten()、squeeze()的用法与区别
- 关于BPSK、QPSK的一些理解,以及MATLAB实现
- 如何解决卸载驱动之后又重新装的问题
- 使用Vim/Neovim编辑二进制文件
- 【进阶】QQ聊天机器人--群聊机器人篇
- Pyqt walk 在Windows查找文件
- jle汇编_X86汇编指令
- Python 去除单色背景
- P9065 [yLOI2023] 云梦谣 题解
- 未转变者服务器车怎么得,未转变者刷车指令大全 | 手游网游页游攻略大全
- 网页中播放RTSP(5) WebSocket播放视频
- matlab计算连续复利,求连续复利计算公式。。。
热门文章
- oracle 行数大于一时,oracle – PL / SQL ORA-01422:精确的提取返回超过请求的行数
- 单一课和综合课的划分依据_缠论108课第105课:股票的操作中远离小聪明,保持机械性的操作...
- 线性表之简介及顺序表
- pthread_mutex_init函数《代码》
- ROS: global_planner 整体解析
- linux内核 panic,linux 内核 panic
- SpringMVC 阶段总结
- IDEA中Spring智能提示,XML Configuration File中spring config
- Spring Boot 笔记汇总
- 一切都是对象,一切都是指针,一切都是东西(python的编程哲学)