c++builder ZIP文件解压与压缩(ZLIB DLL调用),目录复制与删除整合的自用类,可自行扩张!
来源:互联网 发布:时时彩源码出售 编辑:程序博客网 时间:2024/05/23 19:13
头文件:ZipAndFile.h
//---------------------------------------------------------------------------#ifndef ZipAndFileH#define ZipAndFileH#include <Classes.hpp>//---------------------------------------------------------------------------class ZipAndFile{private:public:ZipAndFile();~ZipAndFile();//ZIP操作bool DoZipfile(String DoZip,String ZipFilename,String SourceFile,bool Check);//复制目录bool MyCopyFiles(AnsiString FromFile,AnsiString ToFile);//删除目录bool deldir(char* dir_fullpath);};#endif
源文件:ZipAndFile.cpp
//---------------------------------------------------------------------------#pragma hdrstop#include "ZipAndFile.h"#include "Tlhelp32.h"#include <vcl.h>//---------------------------------------------------------------------------ZipAndFile::ZipAndFile(){}ZipAndFile::~ZipAndFile(){}//ZIP压缩与解压//---------------------------------------------------------------------------bool ZipAndFile::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 //当前目录下的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 //当前目录下的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 ZipAndFile::MyCopyFiles(AnsiString FromFile,AnsiString ToFile){while(true){if (!DirectoryExists(ToFile)){CreateDir(ToFile);//文件夹不存在则创建break;}else{deldir(ToFile.c_str());//在就删除} }SHFILEOPSTRUCT op;String strFrom = FromFile+"\\*.*";String strTo = ToFile;op.fAnyOperationsAborted = true;op.hwnd = NULL;op.wFunc = FO_COPY;op.pFrom = strFrom.c_str();op.pTo = strTo.c_str();op.fFlags = FOF_NOCONFIRMATION |FOF_NOCONFIRMMKDIR; //FOF_NOCONFIRMATION 不出现确认对话框(当需要覆盖时)bool b=false;b=SHFileOperation(&op);//int kkk= SHFileOperation(&op);switch(GetLastError()){//只要出错就弹出return false;}return(b);}//删除目录文件//---------------------------------------------------------------------------bool ZipAndFile::deldir(char* dir_fullpath) //删除指定的目录{ char dir[260]={0};char filename[260]={0};int len = 0;intch = '\\';strcpy(dir, dir_fullpath);len = strlen(dir);char *temp = strrchr(dir,ch);//查找\\if(len < 4 || temp == NULL) //根据后面的\\来判断,可能为磁盘根目录或者不是有效的目录路径return false;if(temp != NULL){ if((temp - dir + 1) != len) //在目录后添加 '\\'strcat(dir,"\\");}GetCurrentDirectory(260,filename);//得到当前目录strcat(filename,"\\");if(strcmp(dir,filename)==0)//如果要删除的目录是当前目录{ strcat(filename,"..");SetCurrentDirectory(filename);//改变当前目录}WIN32_FIND_DATA finddata;HANDLE fFile;bool flag;strcpy(filename,dir);strcat(filename,"*.*");fFile=FindFirstFile(filename,&finddata);flag=true;if(fFile!=INVALID_HANDLE_VALUE) //此目录有没有效{BOOL bfind=true;while(bfind){if(finddata.cFileName[0] != '.'){strcpy(filename,dir);strcat(filename,finddata.cFileName);if(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//判断是不是文件夹{//删除找到的子目录strcat(filename,"\\");//如果文件夹就再加上\\后进行递归flag = flag && deldir(filename); //递归}else{//删除找到的文件SetFileAttributes(filename,FILE_ATTRIBUTE_NORMAL);//文件属性设为普通flag = flag && DeleteFile(filename); //删除}}bfind = FindNextFile(fFile,&finddata);}FindClose(fFile);}if(flag){SetFileAttributes(dir_fullpath,FILE_ATTRIBUTE_NORMAL);//去掉只读if(RemoveDirectory(dir_fullpath))//删除空目录return true;}return false;}
使用方法:包了头文件后:
ZipAndFile *TZipAndFile=new ZipAndFile();//新建对像//删除temp文件夹dir_fullpath=(ExePath+"web_back").c_str();//删除web原文件if(TZipAndFile->deldir(dir_fullpath)) {}delete TZipAndFile;// 删除对像
DLL下载地址:
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);
- c++builder ZIP文件解压与压缩(ZLIB DLL调用),目录复制与删除整合的自用类,可自行扩张!
- 使用ZLIB生成DLL文件,并进行有中文的ZIP文件压缩与解压操作!支持目录压与解!
- java zip文件的压缩与解压
- C++ zip文件的解压与压缩
- php zip文件的解压与压缩
- C++ zip文件的解压与压缩
- 文件zip压缩与解压
- Zip文件压缩与解压
- zip 的 压缩与解压
- 使用 ZLib 压缩/解压 ZIP 文件
- 使用 ZLib 压缩/解压 ZIP 文件
- 使用 ZLib 压缩/解压 ZIP 文件
- 使用 ZLib 压缩/解压 ZIP 文件
- 使用 ZLib 压缩/解压 ZIP 文件
- ZIP压缩与解压
- C# 文件压缩与解压(ZIP格式)
- C# 文件压缩与解压(ZIP格式)
- C# 文件压缩与解压(ZIP格式)
- Android SMS PDU
- 支付宝的SRA数据签名验签
- js实现replaceAll
- Fedora Linux系统中NTFS分区挂载的方法
- http://blog.chinaunix.net/uid-20322254-id-145835.html
- c++builder ZIP文件解压与压缩(ZLIB DLL调用),目录复制与删除整合的自用类,可自行扩张!
- ftp 配置ubuntu8.04 的一些问题解决(网上收集)
- php之数组函数
- Android Launcher研究(三)-----------列出所安装的应用,点击进入相应的应用!
- 手机iphone项-测试崩溃问题总结
- Ubuntu ftp配置
- (转载)有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别
- RAC环境下ORACLE序列缓存导致序列混乱
- C#获取已被使用的网络端点以及判断端口是否已被使用