使用C#中的winrar.exe提取存档,并检测是否发生任何错误
本文关键字:是否 检测 错误 任何 中的 winrar exe 提取 使用 | 更新日期: 2023-09-27 18:20:30
我想写一个提取器应用程序,用C#提取很多存档文件(*.tgz和*.rar)。
我找不到任何支持所有这些存档文件格式的通用组件。因此,我尝试使用WinRAR.exe
。但在这种情况下,我有一些问题。例如:我想知道一个档案是否没有成功提取。并获得错误消息和文件名以供审查,但我无法处理C#中的WinRAR错误。
有处理WinRAR错误的想法吗?或者是否有任何通用组件来提取存档文件?
控制台版本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,或者两者兼而有之。