压缩和解压缩在开发中很常见,比较知名的第三方库就是zlib。最下的文档中给出了zlib源码的下载地址,感兴趣的朋友可以下载下。
我从网上找到了一个很简单的zip,unzip接口,只有四个文件,直接放到工程中就可以用了。下面是两个例子,源码也在最下面的文档中。
string2tchar的方法在之前的文章中有。
void UtilGui::OnBtZipFileClicked()
{
QString qsZipPath = qApp->applicationDirPath() + "/files/" + "2.zip";
QString qsFile = qApp->applicationDirPath() + "/files/" + "1.flv";
HZIP hz; DWORD writ;
TCHAR zipPath[MAX_PATH] = { 0 };
TCHAR fileAdd[MAX_PATH] = { 0 };
string2tchar(qsZipPath.toStdString(), zipPath);
string2tchar(qsFile.toStdString(), fileAdd);
// EXAMPLE 1 - create a zipfile from existing files
hz = CreateZip(zipPath, 0);
ZipAdd(hz,fileAdd, fileAdd);
//ZipAdd(hz, _T("znsimple.txt"), _T("\\simple.txt"));
CloseZip(hz);
//_tprintf(_T("Created '\\simple1.zip'\n"));
}
void UtilGui::OnBtUnzipFileClicked()
{
QString qsSrc = qApp->applicationDirPath() + "/files/" + "1.zip";
QString qsDestDir = qApp->applicationDirPath() + "/files/" ;
HZIP hz; DWORD writ;
std::string res = qsSrc.toStdString();
std::string sDstDir = qsDestDir.toStdString();
TCHAR zipPath[MAX_PATH] = { 0 };
TCHAR destDir[MAX_PATH] = { 0 };
string2tchar(res, zipPath);
string2tchar(sDstDir, destDir);
hz = OpenZip(zipPath, 0);
SetUnzipBaseDir(hz, destDir);
ZIPENTRY ze; GetZipItem(hz, -1, &ze); int numitems = ze.index;
for (int zi = 0; zi < numitems; zi++)
{
GetZipItem(hz, zi, &ze);
UnzipItem(hz, zi, ze.name);
}
CloseZip(hz);
}
代码是在vs+qt的IDE中调试通过,
源码demo一并在此。