使用ZLIB生成DLL文件,并进行有中文的ZIP文件压缩与解压操作!支持目录压与解!
2012-03-28 17:14
921 查看
借鉴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);
调用方法:
压缩目录:
解压目录:
因为有中文操作需要多出一个参数,所以要使用两份,本来准备写类,用构造函数,但发现有点大才小用,就使用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("解压失败!"); }
相关文章推荐
- 使用QuaZip对文件进行压缩解压操作
- Qt使用QuaZip对文件进行压缩解压操作
- Qt使用QuaZip对文件进行压缩解压操作
- 使用Java zip包和apach 的ant包对文件、文件夹进行压缩,兼容中文
- C#文件的压缩和解压(ZIP)使用DotNetZip封装类操作zip文件(创建/读取/更新)实例
- 使用 ZLib 压缩/解压 ZIP 文件
- 【VC++技术杂谈008】使用zlib解压zip压缩文件
- 使用apache的工具类进行zip(rar等压缩文件)的解压
- android通过org.apache.tools.zip解压zip压缩文件,支持中文名
- 使用PHP对文件进行压缩解压(zip)
- 使用 ZLib 压缩/解压 ZIP 文件
- 使用 ZLib 压缩/解压 ZIP 文件
- c# 动态操作 zip\rar 文件,压缩解压组件使用
- 使用 ZLib 压缩/解压 ZIP 文件
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- 使用 ZLib 压缩/解压 ZIP 文件
- ZLIB quazip (只能对ZIP进行解压,不能对RAR等其它的压缩文件解压)
- 使用C#进行文件压缩和解压
- 使用GZIPOutputStream和GZIPInputStream进行压缩解压文件
- 通过Java生成加密压缩文件(支持AES压缩和解压zip文件)