文件压缩
来源:互联网 发布:物流企业网络调查 编辑:程序博客网 时间:2024/04/28 20:35
我们经常需要压缩文件,再编程的时候也需要。
这里列出几个常用的。
1: winrar,没有源码且收费,但是它提供了通过命令行压缩文件的方式;
2:最著名的的7zip, 开源,免费,有sdk。 你可以使用源码, sdk,或命令行方式。
如果没有要求,命令行方式最简单。下载7zip安装程序,然后到安装目录,里面有帮助文档,其中介绍了命令行方式。
如果变成的话,可以直接将安装目录文件同程序以前发布。
3:zlib;
4:XZip:来自 codeproject;http://www.codeproject.com/Articles/4135/XZip-and-XUnzip-Add-zip-and-or-unzip-to-your-app-w
关于7zip sdk编程的说明:
这里有几篇文章,提供综合参考:
1:《利用7zip sdk进行数据流的压缩与解压缩》 http://blog.sina.com.cn/s/blog_5732f6590100qvih.html
2:《7zip 学习笔记》 http://blog.sina.com.cn/s/blog_60791e260100flt9.html
3:http://www.cnblogs.com/greenerycn/archive/2011/10/26/2225815.html
4:http://www.asawicki.info/news_1368_lzma_sdk_-_how_to_use.html
这里我简单总结一下:
1:国外的7zip官方网站无法登陆下载sdk,可以从这里下载:http://sparanoid.com/lab/7z/sdk.html
2:解压sdk后,进入\lzma920\C\Util\LzmaLib,可以找到VC6工程;其它工程编译有点问题,我没有调试;
3:lzma920在编译的时候有个地方要修改,可以参考,文章1;
编译后:
在 C:\UTIL 找到dll;
在 Debug 和 Release文件夹下找到相关的lib;
在zma920\C文件夹中找到:Types.h 和 Lzmalib.h;
4:简单示例,简单修改了文章4中的例子,可以在vc6中运行:
将上述文件放到开发工程中:
#include "LzmaLib.h"
extern "C"
{
#pragma comment(lib,"LZMA.lib")
};
void CTdlgDlg::OnButton1()
{
// TODO: Add your control notification handler code here
FILE *pFile = fopen( "file.dat", "rb" );
if (pFile == NULL)
{
return ;
}
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))
{//³ö´íÁË
MessageBox( _T("ѹËõʱ³ö´í£¡"));
delete psrcRead;
delete pDecomress;
delete pLzma;
fclose(pFile);
return ;
}
FILE *pCompressFile = fopen( "compress.dat", "wb" ); //дÈëѹËõºóµÄÊý¾Ý
if (pCompressFile == NULL)
{
MessageBox( _T("´´½¨Îļþ³ö´í!"));
delete psrcRead;
delete pDecomress;
delete pLzma;
fclose(pFile);
return ;
}
fwrite(pLzma,sizeof(char),destLen,pCompressFile);
fclose(pCompressFile);
FILE *pDecompressFile = fopen( "decompress.dat" , "wb" ); //дÈë½âѹËõÊý¾Ý
if (pDecompressFile == NULL)
{
MessageBox( _T("дÈëÊý¾Ý³ö´í£¡") );
delete psrcRead;
delete pDecomress;
delete pLzma;
fclose(pFile);
return ;
}
if (SZ_OK != LzmaUncompress(pDecomress,&srcLen,pLzma,&destLen,prop,5))
{
delete psrcRead;
delete pDecomress;
delete pLzma;
fclose(pDecompressFile);
fclose(pFile);
return ;
}
fwrite(pDecomress,sizeof(char),srcLen,pDecompressFile);
delete psrcRead;
delete pDecomress;
delete pLzma;
fclose(pDecompressFile);
fclose(pFile);
}
- 文件压缩和解压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 文件压缩
- 数据分析这点事
- 8个DBA最常用的监控Oracle数据库的常用shell脚本
- CIRCOS教程翻译 3.3——Using z-depth
- [HTML5-SVG]基于SVG技术进行WebGIS开发浅析
- View旋转
- 文件压缩
- ASMCMD的使用
- 一段阻塞队列代码的纠错与优化
- android版天气预报程序开发总结
- shell 脚本格式化输出
- 模型设计与实践---(三)IO模型Select IO
- xml文档与字符串的转换实例
- 【4.26.广州站】【TechExcel全球敏捷研发管理训练营】"需求与质量整合的敏捷在企业实践中更有效"培训课程(讲师:TechExcel 全球总裁周铁人博士)
- 挖掘管理价值:企业软件项目管理实战