文件压缩

来源:互联网 发布:物流企业网络调查 编辑:程序博客网 时间: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);
 
}










原创粉丝点击