【第22期】观点:IT 行业加班,到底有没有价值?

使用ZLIB生成DLL文件,并进行有中文的ZIP文件压缩与解压操作!支持目录压与解!

原创 2012年03月28日 17:14:30

借鉴ZLibWrap.DLL进行二次加工生成DLL文件,在C++builder中进行动态调用DLL,压缩与解压标准ZIP文件操作!

因为有中文操作需要多出一个参数,所以要使用两份,本来准备写类,用构造函数,但发现有点大才小用,就使用COPY一份代码了!


DLL文件下载

http://download.csdn.net/detail/goodai007/4182207

DLL两个接口:

//压缩,bUtf8为false将支持路径与文件内包含中文

BOOL ZWZipCompress(LPCTSTR lpszSourceFiles, LPCTSTR lpszDestFile, bool bUtf8 = false);

//解压
BOOL ZWZipExtract(LPCTSTR lpszSourceFile, LPCTSTR lpszDestFolder);


bool __fastcall DoZipfile(String DoZip,String ZipFilename,String SourceFile,bool Check)
{
	bool ZipReturn=false;
	WideString w1;//必需要这样申请WideString变量,不然传值时会让两个变量使用同一样内存地址,搞了3个小时才发现这是BCB2006的BUG.
	WideString w2;
	LPCTSTR L1;//必需使用这个格式的变量,不然传过去到DLL时乱码。
	LPCTSTR L2;
	if(DoZip=="ZWZipCompress")//压缩
	{
		w1=SourceFile;
		w2=ZipFilename;
		L1=(const char*)w1.c_bstr();
		L2=(const char*)w2.c_bstr();
		bool __stdcall (*DllMethods)(LPCTSTR,LPCTSTR,bool);
		HINSTANCE hInst=NULL;
		hInst=LoadLibrary((ExtractFilePath(Application->ExeName)+"ZLibWrap.dll").c_str());//动态加载DLL
		FARPROC P;
		P = GetProcAddress(hInst,DoZip.c_str());
		DllMethods=(bool __stdcall (__cdecl *)(LPCTSTR,LPCTSTR,bool))P;
		if(DllMethods){
			ZipReturn=DllMethods(L1,L2,Check);
		}
		FreeLibrary(hInst);
		return ZipReturn;
	}else if(DoZip=="ZWZipExtract")//解压
	{
		w1=ZipFilename;
		w2=SourceFile;
		L1=(const char*)w1.c_bstr();
		L2=(const char*)w2.c_bstr();
		bool __stdcall (*DllMethods)(LPCTSTR,LPCTSTR);
		HINSTANCE hInst=NULL;
		hInst=LoadLibrary((ExtractFilePath(Application->ExeName)+"ZLibWrap.dll").c_str());//当前目录下的DLL文件
		FARPROC P;
		P = GetProcAddress(hInst,DoZip.c_str());
		DllMethods=(bool __stdcall (__cdecl *)(LPCTSTR,LPCTSTR))P;
		if(DllMethods){
			ZipReturn=DllMethods(L1,L2);
		}
		FreeLibrary(hInst);
		return ZipReturn;
	}
}

调用方法:

压缩目录:

	bool Check=true;
	if(CheckBox1->Enabled)
	Check=false;//false支持中文
	String DoZip="ZWZipCompress";
	String ZipFilename=Edit1->Text;
	String SourceFile=Edit2->Text;
	if(DoZipfile(DoZip,ZipFilename,SourceFile,Check)){
		ShowMessage("压缩成功!");
	}else{
		ShowMessage("压缩失败!");
	}

解压目录:

	bool Check=true;
	if(CheckBox1->Enabled)
	Check=false;//false支持中文
	String DoZip="ZWZipExtract";
	String ZipFilename=Edit1->Text;
	String SourceFile=Edit2->Text;
	if(DoZipfile(DoZip,ZipFilename,SourceFile,Check)){
		ShowMessage("解压成功!");
	}else{
		ShowMessage("解压失败!");
	}


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Apache commons-compress ZIP打包

ZipArchiveOutputStream zipOutput = null; try { String folderPath = "d:\\测试文件夹"; File zipFil...

使用 ZLib 压缩/解压 ZIP 文件

实际应用中有时候会遇到需要处理 ZIP 压缩解压的情况,这时候我们有大概三种选择: 调用 rar.exe, unzip.exe 等 使用某现成库 完全手写 第一种虽然能完成任务,但是没法知晓结...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

java编程思想—chapter11.Zipcompress.java

//: c12:ZipCompress.java// Uses Zip compression to compress any// number of files given on the comma...

Hbuilder中使用plus.zip.compressImag上传图片中涉及到的问题

项目使用Hbuilder开发,涉及到了图片上传,plus.zip.compressImage当然就是不二选择. 但是在使用过程中,有一系列的问题. 1.使用相机拍照的图片,可以正常压缩上传. 2...

zlib库compress和uncompress函数的使用方法

zlib(http://zlib.net/)提供了简洁高效的In-Memory数据压缩和解压缩系列API函数,很多应用都会用到这个库,其中compress和uncompress函数是最基本也是最常用的...

apache.commons.compress zip压缩解压工具类完整版(使用递归支持无限文件夹的解压缩)

压缩解压工具类完整版(使用递归支持无限文件夹的解压缩) 网上一致没有找到可以完全无限文件夹的解压缩,并支持中文的zip工具类,所以自己写了一个在这里分享一下。 说明:jdk自带的zip中文会乱码,...

HTML5+规范:Zip(管理文件压缩和解压)

Zip模块管理文件压缩和解压,通过plus.zip可获取压缩管理对象。 1、方法 1.1、compress: 压缩生成Zip文件       void plus.zip.compress(src...

将Delphi Xe2的Zip单元移植了一份到Delphi Xe上

近日看到XE2上的Zip单元用起很方便,但我目前一直都有在用XE,所以就将它移植到XE上。 unit ZipFile; interface uses   SysUtil...

使用Ionic.Zip.dll压缩和解压文件代码笔记

下载 Ionic.Zip.dll 组件,添加引用,引用命名空间 using Ionic.Zip; [html] view plain copy #region Ionic.Zip ...

C# DotNetZip压缩单、多文件以及文件夹

有些项目为了更好的用户体验,会把下载文件做成一个压缩的文件,直接下载,免得去一个个的点击下载文件。网上有很多压缩文件的方法,也有第三方的分装DLL文件,本文主要介绍DotNetZip压缩方法。 Dot...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)