关于C++中如何给文件加压和解压的问题

驴被脑袋踢了 2009-08-16 10:00:45
如题,请教各位,在C++中如何给文件加压和解压,感觉应该有这样的类库,大家清楚吗?麻烦哪位清楚的XDJM可以告诉我一

下,谢谢~~~
...全文
194 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
驴被脑袋踢了 2009-08-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 danxuezx 的回复:]
引用 6 楼 vicozo 的回复:
各位高手,我看了下,我想找看看有没有什么类库可以直接调用的呢,GZIP我看了下,可是这个是用C语言写的,没有封装,不好调用啊

为什么非得调用类库呢?用系统自带的解压压缩不行吗?
[/Quote]

你好 ,谢谢你的帮忙,请问下压缩的部分大概是什么样子呢?主要不清楚调用系统的什么函数。。。能不能再贴一下,谢谢!
danxuezx 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vicozo 的回复:]
各位高手,我看了下,我想找看看有没有什么类库可以直接调用的呢,GZIP我看了下,可是这个是用C语言写的,没有封装,不好调用啊
[/Quote]
为什么非得调用类库呢?用系统自带的解压压缩不行吗?
驴被脑袋踢了 2009-08-20
  • 打赏
  • 举报
回复
各位高手,我看了下,我想找看看有没有什么类库可以直接调用的呢,GZIP我看了下,可是这个是用C语言写的,没有封装,不好调用啊
danxuezx 2009-08-17
  • 打赏
  • 举报
回复
以下是解压缩,压缩需要修改一下
bool UnZipFolder(LPCTSTR zipFile,LPCTSTR destination)
{

DWORD strlen = 0;
HRESULT hResult;
IShellDispatch *pISD;
Folder *pToFolder = NULL;
Folder *pFromFolder = NULL;
FolderItems *pFolderItems = NULL;
FolderItem *pItem = NULL;

VARIANT vDir, vFile, vOpt;
BSTR strptr1, strptr2;
CoInitialize(NULL);

bool bReturn = false;

hResult = CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER,
IID_IShellDispatch, (void **)&pISD);

if(FAILED(hResult))
{
return bReturn;
}

VariantInit(&vOpt);
vOpt.vt = VT_I4;
vOpt.lVal = 16+4; // Do not display a progress dialog box ~ This will not work properly!


CString strZipFile(zipFile);
CString strDestination(destination);
strptr1 = strZipFile.AllocSysString();
strptr2 = strDestination.AllocSysString();

VariantInit(&vFile);
vFile.vt = VT_BSTR;
vFile.bstrVal = strptr1;
hResult = pISD->NameSpace(vFile, &pFromFolder);

VariantInit(&vDir);
vDir.vt = VT_BSTR;
vDir.bstrVal = strptr2;

hResult = pISD->NameSpace(vDir, &pToFolder);

if(S_OK == hResult)
{
hResult = pFromFolder->Items(&pFolderItems);
if(SUCCEEDED(hResult))
{
long lCount = 0;
pFolderItems->get_Count(&lCount);
IDispatch* pDispatch = NULL;
pFolderItems->QueryInterface(IID_IDispatch,(void**)&pDispatch);
VARIANT vtDispatch;
VariantInit(&vtDispatch);
vtDispatch.vt = VT_DISPATCH;
vtDispatch.pdispVal = pDispatch;

//cout << "Extracting files ...\n";
hResult = pToFolder->CopyHere(vtDispatch,vOpt);
if(hResult != S_OK) return false;



//Cross check and wait until all files are zipped!
FolderItems* pToFolderItems;
hResult = pToFolder->Items(&pToFolderItems);

if(S_OK == hResult)
{
long lCount2 = 0;

hResult = pToFolderItems->get_Count(&lCount2);
if(S_OK != hResult)
{
pFolderItems->Release();
pToFolderItems->Release();
SysFreeString(strptr1);
SysFreeString(strptr2);
pISD->Release();
CoUninitialize();
return false;
}
//Use this code in a loop if you want to cross-check the items unzipped.
/*if(lCount2 != lCount)
{
pFolderItems->Release();
pToFolderItems->Release();
SysFreeString(strptr1);
SysFreeString(strptr2);
pISD->Release();
CoUninitialize();
return false;
}*/

bReturn = true;
}

pFolderItems->Release();
pToFolderItems->Release();
}

pToFolder->Release();
pFromFolder->Release();
}

//cout << "Over!\n";
SysFreeString(strptr1);
SysFreeString(strptr2);
pISD->Release();

CoUninitialize();
return bReturn;
}
bluesky395 2009-08-17
  • 打赏
  • 举报
回复
CAB格式:http://www.vckbase.com/document/viewdoc/?id=708
zaodt 2009-08-16
  • 打赏
  • 举报
回复
利用 WinRAR 的控制台命令也可以。
MoXiaoRab 2009-08-16
  • 打赏
  • 举报
回复
cgzip 支持多格式

http://www.codeproject.com/KB/cpp/cgzip.aspx
副组长 2009-08-16
  • 打赏
  • 举报
回复
是压缩和解压吗? 有zlib,比较通用的。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧