7z 相关类 进度条 回调函数
来源:互联网 发布:邮箱软件哪个好 编辑:程序博客网 时间:2024/04/29 22:15
首先去7z官网下载代码 7z的源代码或者lzma都可以,但是推荐下7z的源代码,里面东西比较全
7z.dll 通过 COM 接口工作。但是它并没有使用标准的 COM 接口 。如果有com基础的话 看他的代码会比较容易。
比较简单的例子是 /cpp/7zip/ui/client7z 里面有简单的 压缩 解压缩 和查看压缩包文件。 7z.dll的源代码在 bundles/7zformatf 里面
其中 clinet7z和 file manager的代码看起来比较好理解,可以自己一步一步跟着走。 // 晚上再更新
7z.dll 采用com接口工作,但是它并没有使用标准的COM接口。
对文件的解压主要靠下面两个回调类
/ Archive Open callback class
// 压缩文件打开回调类 class CArchiveOpenCallback:
public IArchiveOpenCallback,
public ICryptoGetTextPassword,
public CMyUnknownImp
// 解压回调类 class CArchiveExtractCallback:
public IArchiveExtractCallback,
public ICryptoGetTextPassword,
public CMyUnknownImp
解压回调类中
// IProgress
STDMETHOD(SetTotal)(UInt64 size); //获得加压文件总字节数
STDMETHOD(SetCompleted)(const UInt64 *completeValue); //获取当前解压文件大小字节数 可以再这个回调函数中自己计算当前的解压进度。
//IArchiveExtractCallback
STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream,Int32 askExtractMode); //获取文件流,
LRESULT MyReleaseSteam(); //当取消解压时,释放文件流控制权原因取消解压后没有走到SetOperationResult()回调函数,而释放文件流就在这个函数中,所以要自己释放。
//获取接口函数
CreateObjectFunc createObjectFunc = (CreateObjectFunc)lib.GetProc("CreateObject");
CMyComPtr<IInArchive> archive;
errorcode = createObjectFunc(&CLSID_CFormat7z, &IID_IInArchive, (void **)&archive);
CInFileStream *fileSpec = new CInFileStream;
CMyComPtr<IInStream> file = fileSpec;
UString archiveName = GetUnicodeString(inFile);
if (!fileSpec->Open(archiveName))
{
//打不开压缩文件,(找不到该文件)
return ;
}
CArchiveOpenCallback *openCallbackSpec = new CArchiveOpenCallback;
CMyComPtr<IArchiveOpenCallback> openCallback(openCallbackSpec);
openCallbackSpec->PasswordIsDefined = false;
errorcode = archive->Open(file, 0, openCallback);
if (errorcode != S_OK)
return;
// Extract command
CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback;
CMyComPtr<IArchiveExtractCallback> extractCallback(extractCallbackSpec);
extractCallbackSpec->Init(archive, OutFile); // second parameter is output folder path
extractCallbackSpec->PasswordIsDefined = false;
extractCallbackSpec->SetFileInfo(info);
// extractCallbackSpec->PasswordIsDefined = true;
// extractCallbackSpec->Password = L"1";
errorcode = archive->Extract(NULL, (UInt32)(Int32)(-1), false, extractCallback);
if (errorcode != S_OK)
return;
- 7z 相关类 进度条 回调函数
- z-stack 回调函数
- 回调函数 相关
- 回调函数相关
- 回调函数之类相关
- nginx回调函数相关
- Z-stack回调函数及回调机制
- [转载]回调函数相关介绍
- 回调函数的相关知识点
- 类回调函数
- Opencv中添加进度条及回调函数
- 类中的回调函数
- C++ 类回调函数
- c++ 类回调函数
- Z-stack中回调函数及回调机制的分析
- Z-stack中回调函数及回调机制的分析
- Z-stack中回调函数及回调机制的分析
- Z-stack中回调函数及回调机制的分析
- iOS8.0-----UIAlertController
- STM32 GPIO配置
- mongodb 基本语句
- redis jedis(java)
- TCP 通信过程中各步骤的状态
- 7z 相关类 进度条 回调函数
- 关于HTML5数据存储
- Meta标签中的viewport属性
- 为什安全测试对于汽车行业如此重要?
- java中用StringBuffer写文件实现自动换行
- Xcode怎么查找变量使用位置
- git常用命令和ViM编辑器----源于培训笔记
- matlab中“执行字符串”函数eval在不同情况下的用法(二)
- LeetCode 之 Valid Palindrome — C 实现