如何从7z commandLine进程获取扩展错误信息

时间:2008-11-03 09:20:36

标签: c# 7zip

在我的C#app中,我运行一个7z进程将存档提取到它的目录

存档位于%TEMP%目录的随机命名目录中,例如

  

C:\ Documents and Settings \ User \ Local   设置\温度\ vtugoyrc.fd2

(fullPathFilename =“C:\ Documents and Settings \ User \ Local Settings \ Temp \ vtugoyrc.fd2 \ xxx.7z”)

我的代码是:

sevenZipProcessInfo.FileName = SEVEN_ZIP_EXECUTABLE_PATH;
sevenZipProcessInfo.Arguments = "x " + fullPathFilename;
sevenZipProcessInfo.WindowStyle = ProcessWindowStyle.Hidden;
sevenZipProcessInfo.UseShellExecute = true;
sevenZipProcessInfo.WorkingDirectory = Path.GetDirectoryName(fullPathFilename);
Process sevenZipProcess = Process.Start(sevenZipProcessInfo);
if (sevenZipProcess != null)
{
    sevenZipProcess.WaitForExit();
    if (sevenZipProcess.ExitCode != 0)
         ...exit code is 2 (fatal error by the 7z help)

我在哪里可以找到更详细的文档?

3 个答案:

答案 0 :(得分:5)

您在这里使用7 Zip作为外部流程。它相当于直接从命令行调用命令。

您是否考虑使用实际的库来压缩/解压缩文件。你可以在C#项目中引用的东西。

Sharp Zip Lib相当清楚,但是使用7zip存档的具体wrapper library

答案 1 :(得分:2)

假设进程将错误写入stderr / stdout,您可以将UseShellExecute设置为false,并重定向stdout / stderr; MSDN上有一个例子here(stderr)和here(stdout)。

如果您需要读取stderr 标准输出,使用WaitForExit(),那么事情会变得更有趣 - 通常涉及几个线程,或者异步方法。

另一个最终选项是在命令中使用管道重定向 - 即1>out.txt 2>&1 - 将stdout管道输出到out.txt,并将stderr管道输入stdout,这样进入。文本。然后阅读out.txt

答案 2 :(得分:0)

感谢您的帮助。

无论如何问题是使用'long-path-name' - >命令行进程找不到C:\ Documents and Settings \(因为名称中的空格)。可以找到解决方案 这里standard way to convert to short path in .net