65.9K
CodeProject 正在变化。 阅读更多。
Home

一个用于解压缩 Rar 文件的 MFC 类,带有多线程和 GUI 支持

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.51/5 (13投票s)

2006年7月25日

CPOL

3分钟阅读

viewsIcon

59930

downloadIcon

1990

一个用于解压缩 Rar 文件的 MFC 类,带有多线程和 GUI 支持。

Sample image

引言

我一直在寻找一种自动提取 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
  • 它支持多个卷的 Rar 文件。
  • 您可以提取 *A.rar*、*A.r00*、*A.r01* 等...

  • 支持 GUI 更新以反映解压缩过程。
  • 在文件解压缩的同时,您可以在 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);:设置选项,如果输入存档在任务完成后自动删除。 例如,如果 bRemoveTRUE,则输入文件 *test.rar*、*test.r00*、*test.r01* ... 等将被删除。
  • void SetListBox(CListBox *pBox):此函数将输入列表框与文件解压缩操作挂钩; 当前的文件解压缩结果会显示在列表框中,以便用户可以监控动态过程。
  • void SetStaticControl(CStatic *pStatic):与 SetListBox() 类似,此函数将 CStatic 控件与文件解压缩操作挂钩; 当前的文件解压缩结果会显示在静态控件中,以便用户可以监控动态过程。
  • void Unpack(bool bMultiThread=TRUE):此函数执行文件解压缩操作。 如果 bMultiThreadTRUE,则将创建一个新线程来提取存档,否则将使用当前进程中的主线程,即顺序执行。

致谢

  • 我要感谢 RARLAB 提供如此简洁方便的 API 接口。
  • 在演示程序中,文章“如何浏览文件夹”由 Nitron 改编为 MFC 版本,我在此感谢他的努力。
  • 我还想提请您注意,我的免费软件之一 FlashUnpack 是基于上述 MFC 类构建的。 您可以在 http://flashunpack.3322.org/ 下载它。 欢迎您提出反馈意见。

历史

  • 2006 年 7 月 27 日,小幅帮助更新。
  • 2006 年 7 月 26 日,首次公开发布。
© . All rights reserved.