使用C#中的winrar.exe提取存档,并检测是否发生了任何错误

时间:2014-09-02 10:35:48

标签: c# archive extraction winrar

我想编写一个提取器应用程序,使用C#提取大量存档文件(* .tgz和* .rar)。

我找不到任何支持所有这些归档文件格式的通用组件。出于这个原因,我正在尝试使用WinRAR.exe。但在这种情况下,我有一些问题。例如:我想知道存档是否未成功提取。并获取错误消息和文件名以供审阅,但我无法处理C#中的WinRAR错误。

有任何想法来处理WinRAR错误吗?或者是否有任何通用组件来提取存档文件?

2 个答案:

答案 0 :(得分:1)

我认为你可以运行这个过程并等待它完成。

  static public string RunAndGetOutput( string filename, string arguments )
  {
     // Start the child process.
     Process p = new Process();
     // Redirect the output stream of the child process.
     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardOutput = true;
     p.StartInfo.FileName = filename;
     p.StartInfo.Arguments = arguments;
     p.Start();
     // Read the output stream first and then wait.
     string output = p.StandardOutput.ReadToEnd();
     p.WaitForExit();
     // p.ExitCode - could read this to get the exit code
     return output;
  }

然后你可以将输出视为字符串,或者返回p.ExitCode,或两者兼而有。

答案 1 :(得分:1)

此处不能使用控制台版本Rar.exe,因为它仅支持RAR存档。仅从WinRAR.exe支持从ZIP,TAR和其他存档格式中提取。

打开WinRAR的帮助 - 文件WinRAR.chm在WinRAR的程序文件文件夹中。选择标签目录,然后打开命令行模式 WinRAR退出代码,然后点击 WinRAR退出代码列表。此列表包含返回给调用应用程序的值,该应用程序位于应用程序中。正如您可以读取任何值更大0表示存在问题。

WinRAR的下一个帮助还包含命令行模式列表项切换。有几个开关对您的任务感兴趣。最好先查看帮助页面按字母顺序切换列表

您应该始终使用开关-cfg-调用WinRAR.exe,以避免依赖用户配置。

-ilog开关是用于将所有错误消息写入文件的下一个开关,可以在WinRAR完成后读取。

但我真的不明白为什么有人应该使用你的应用程序来提取档案,因为已经有几个共享软件和免费软件工具可用。 WinRAR也是共享软件。因此,您的应用程序的用户需要购买WinRAR许可证。

许多其他应用程序用于提取RAR压缩文件的unrar.dll也是免费软件,也是控制台应用程序UnRAR.exe。但是使用UnRAR.exe和unrar.dll,只能提取RAR档案。 UnRAR.exe和unrar.dll不支持创建RAR存档或提取其他格式的存档。