【问题标题】:how to get extended error information from 7z commandLine process如何从 7z 命令行进程中获取扩展的错误信息
【发布时间】:2008-11-03 09:20:35
【问题描述】:

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

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

C:\文档和设置\用户\本地 设置\Temp\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)

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

【问题讨论】:

    标签: c# 7zip


    【解决方案1】:

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

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

    Sharp Zip Lib 众所周知,但这里有一个特定的wrapper library 用于使用 7zip 存档

    【讨论】:

    • 但是我选择不这样做,因为至少标准 7z 库仅提供文件级别的压缩,而无需将多个文件归档到一个中
    【解决方案2】:

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

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

    另一个最终选择是在命令中使用管道重定向 - 即1>out.txt 2>&1 - 这会将 stdout 管道传输到 out.txt,并将 stderr 管道传输到 stdout,所以这个 进入 out.txt .然后从out.txt读取。

    【讨论】:

    • 我收到指出问题所在的错误消息的方式只是使用命令行 (cmd) 运行相同的东西。
    【解决方案3】:

    感谢大家的帮助。

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

    【讨论】:

      猜你喜欢
      • 2013-07-07
      • 1970-01-01
      • 2020-10-15
      • 2023-04-08
      • 1970-01-01
      • 2015-06-17
      • 2014-04-02
      • 1970-01-01
      • 2015-10-08
      相关资源
      最近更新 更多