注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

零售创新,创新那些事儿,SPSS,VBA

零售创新

 
 
 

日志

 
 
关于我

新浪微博,零售创新 研究经理,数据分析师 希望和市场研究和零售业的同事共同进步! 本博客发表的都是免费或试用的资料,如果有版权问题请发邮件wangli12a@163.com联系删除。 spss excel vba blog

网易考拉推荐

7zip编译笔记【转】  

2010-12-30 09:16:18|  分类: 电脑知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

7zip编译笔记【转】

7zip 说明:
关于此库的详细说明请看 http://zh.wikipedia.org/wiki/Zlib 或自己百度。

中文许可协议:
http://7z.sparanoid.com/license.txt

7zip 获取:
http://sourceforge.net/projects/sevenzip/ 下载最新版
http://nchc.dl.sourceforge.net/project/sevenzip/7-Zip/9.07%20beta/7z907.tar.bz2
http://nchc.dl.sourceforge.net/project/sevenzip/7-Zip/9.07%20beta/lzma907.tar.bz2

7zip 编译:
我们选择VS2008开发环境。
解压7zip包,四个目录ASM,C,CPP,DOC。我们进入CPP目录下,进入命令行。进入7zip目录,先运行VS2008的环境设置脚本。vsvars32.bat,VS2008的TOOLS目录下。
然后敲入nmake,编译开始了,编译时间为30分钟左右!!!(我编译的是整个工程,包括7ZIP的窗口程序和命令行,我当初不知道)喝杯茶,吃顿饭,上个厕所就好了^_^
编译完后中间文件多达300多兆。我们运行清理脚本:

------------保存以下脚本为BAT文件---------------

@echo Off
@echo 正在删除中间文件......
del /s /a *.obj *.ncb BuildLog.htm *.user *.exp *.idb *.suo *.res *.dep *.pdb *.netmodule *.aps *.ilk 2>nul

@echo 删除工作完成了!
pause

------------------------------------------------

将虚线部分代码保存为BAT文件,谢谢CPP目录运行之,片刻之后垃圾就清除了。

7zip 使用:
在开始使用库之前先来用下7zip为我们提供的压缩算法:7z/Lzma
在C目录中有算法文件,进入Util\LzmaLib目录,编译生成LIB库,导出了以下两函数:
LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen,
  unsigned char *outProps, size_t *outPropsSize,
  int level,     
  unsigned dictSize, 
  int lc,       
  int lp,       
  int pb,       
  int fb,       
  int numThreads
  );

MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen,
  const unsigned char *props, size_t propsSize);

LzmaCompress 为压缩函数,LzmaUncompress 为解压缩函数:

导入Types.h 和 Lzmalib.h 到工程中。

代码如下:
// LzmaTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "LzmaLib.h"
extern "C"
{
#pragma  comment(lib,"lzma.lib")
};

int _tmain(int argc, _TCHAR* argv[])
{
FILE *pFile;
_tfopen_s(&pFile,_T("file.dat"),_T("rb"));
if (pFile == NULL)
{
  _ftprintf_s(stderr,_T("Error to Open the file!"));
  return -1;
}
fseek(pFile,0,SEEK_END);
size_t srcLen = ftell(pFile);
rewind(pFile);
size_t destLen = srcLen*2;
unsigned char *psrcRead = new unsigned char[srcLen]; //原始文件数据
unsigned char *pDecomress = new unsigned char[srcLen]; //存放解压缩数据
unsigned char *pLzma = new unsigned char[destLen]; //存放压缩数据

fread(psrcRead,sizeof(char),srcLen,pFile);
unsigned char prop[5];
size_t sizeProp = 5;

if (SZ_OK != LzmaCompress(pLzma,&destLen,psrcRead,srcLen,prop,&sizeProp,5,(1<<24),3,0,2,32,2))
{//出错了
  _ftprintf_s(stderr,_T("压缩时出错!"));
  delete psrcRead;
  delete pDecomress;
  delete pLzma;
  fclose(pFile);
  return -1;
}

FILE *pCompressFile;
_tfopen_s(&pCompressFile,_T("compress.dat"),_T("wb")); //写入压缩后的数据
if (pCompressFile == NULL)
{
  _ftprintf_s(stderr,_T("创建文件出错!"));
  delete psrcRead;
  delete pDecomress;
  delete pLzma;
  fclose(pFile);
  return -1;
}
fwrite(pLzma,sizeof(char),destLen,pCompressFile);
fclose(pCompressFile);

FILE *pDecompressFile;
_tfopen_s(&pDecompressFile,_T("decompress.dat"),_T("wb")); //写入解压缩数据
if (pDecompressFile == NULL)
{
  _ftprintf_s(stderr,_T("写入数据出错!"));
  delete psrcRead;
  delete pDecomress;
  delete pLzma;
  fclose(pFile);
  return -1;
}
if (SZ_OK != LzmaUncompress(pDecomress,&srcLen,pLzma,&destLen,prop,5))
{
  delete psrcRead;
  delete pDecomress;
  delete pLzma;

  fclose(pDecompressFile);
  fclose(pFile);
  return -1;
}
fwrite(pDecomress,sizeof(char),srcLen,pDecompressFile);

delete psrcRead;
delete pDecomress;
delete pLzma;

fclose(pDecompressFile);
fclose(pFile);

return 0;
}

编译好后,放入一个文件到当前目录,我放了个DLL,改名为FILE.DAT,运行之,一个15兆的文件就只有2兆了!!

from:http://blog.sina.com.cn/s/blog_60791e260100flt9.html

  评论这张
 
阅读(1808)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017