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

本文关键字:是否 检测 错误 任何 中的 winrar exe 提取 使用 | 更新日期: 2023-09-27 18:20:30

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

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

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

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

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

在WinRAR的程序文件文件夹中打开WinRAR帮助文件WinRAR.chm。选择选项卡内容并打开命令行模式WinRAR退出代码,然后单击WinRAR出口代码列表。此列表包含返回到调用应用程序的值,该应用程序就是您的应用程序。由于您可以读取任何大于0的值,因此表示存在问题。

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

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

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

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

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

我想您可以运行流程并等待它完成。

  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,或者两者兼而有之。