我想编写一个提取器应用程序,使用C#提取大量存档文件(* .tgz和* .rar)。
我找不到任何支持所有这些归档文件格式的通用组件。出于这个原因,我正在尝试使用WinRAR.exe
。但在这种情况下,我有一些问题。例如:我想知道存档是否未成功提取。并获取错误消息和文件名以供审阅,但我无法处理C#中的WinRAR错误。
有任何想法来处理WinRAR错误吗?或者是否有任何通用组件来提取存档文件?
答案 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存档或提取其他格式的存档。