一个用于解压缩 Rar 文件的 MFC 类,带有多线程和 GUI 支持
一个用于解压缩 Rar 文件的 MFC 类,带有多线程和 GUI 支持。
引言
我一直在寻找一种自动提取 Rar 文件的方法,类似于 WinRar 的方式。 CUnrarDLL 1.0 这篇文章由 rich.w. 撰写,非常棒;但是,它并没有完全满足我的期望。
在这篇文章中,我提供了一个 MFC 类,用于使用 *unrar.dll* (来自 RARLIB) 解压缩 Rar 文件。
它的一些特性包括
- 它是一个基于 MFC 的类,非常方便使用。
例如,以下代码片段执行最简单的文件提取任务
CUnrarObject m_UnrarObject; // Declare an object instance
m_UnrarObject.SetInputPath("C:\\Test.rar"); // Input the file to be extracted
m_UnrarObject.SetOutputPath("D:\\Output"); // Set the output folder path
m_UnrarObject.Unpack(); // Do the actual extraction
您可以提取 *A.rar*、*A.r00*、*A.r01* 等...
在文件解压缩的同时,您可以在 CListBox
、CStatic 或其他 GUI 控件中显示文件提取结果。 当您处理大量存档时,例如 10M 到 20M 的文件,或者如果存档包含 10,000 个文件时,这可能会很有用。 它会通知用户它仍在处理中并且还活着...
这允许您在提取文件时同时执行其他任务,并且您的界面仍然可以很好地响应。
成功解压缩文件后,您可能希望删除原始输入存档,就像通常手动完成的那样。 此类允许您在任务完成后自动删除它们(例如,*A.rar*、*A.r00*、*A.r01* 等)。
示例用法
该类预计使用起来很简单,例如
CUnrarObject m_Obj;
m_Obj.SetInputPath("... ");
m_Obj.SetOutputPath("...");
BOOL CXXXDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//Hook the GUI control with the object
m_Obj.SetListBox(&m_ListBox);
m_Obj.SetStaticControl(&m_Static);
//Delete the original archives on finish.
m_Obj.SetCleanArchiveOption(TRUE);
}
//Use multithread functions to unpack the archive
m_Obj.Unpack(TRUE);
就是这样。
关键函数
void SetInputPath(CString InputPath)
:此函数输入要解压缩的 *。rar* 文件。void SetOutputPath(CString OutputPath)
:此函数指定解压缩输入 *。rar* 文件的位置。CString GetInputPath()
:返回要解压缩的输入存档。CString GetOutputPath()
:返回要提取存档的输出文件夹。void SetCleanArchiveOption(bool bRemove);
:设置选项,如果输入存档在任务完成后自动删除。 例如,如果bRemove
为TRUE
,则输入文件 *test.rar*、*test.r00*、*test.r01* ... 等将被删除。void SetListBox(CListBox *pBox)
:此函数将输入列表框与文件解压缩操作挂钩; 当前的文件解压缩结果会显示在列表框中,以便用户可以监控动态过程。void SetStaticControl(CStatic *pStatic)
:与SetListBox()
类似,此函数将CStatic
控件与文件解压缩操作挂钩; 当前的文件解压缩结果会显示在静态控件中,以便用户可以监控动态过程。void Unpack(bool bMultiThread=TRUE)
:此函数执行文件解压缩操作。 如果bMultiThread
为TRUE
,则将创建一个新线程来提取存档,否则将使用当前进程中的主线程,即顺序执行。
致谢
- 我要感谢 RARLAB 提供如此简洁方便的 API 接口。
- 在演示程序中,文章“如何浏览文件夹”由 Nitron 改编为 MFC 版本,我在此感谢他的努力。
- 我还想提请您注意,我的免费软件之一 FlashUnpack 是基于上述 MFC 类构建的。 您可以在 http://flashunpack.3322.org/ 下载它。 欢迎您提出反馈意见。
历史
- 2006 年 7 月 27 日,小幅帮助更新。
- 2006 年 7 月 26 日,首次公开发布。