我可以跟踪C#/ CMD中的压缩过程并确定何时完成?

时间:2018-04-19 12:58:04

标签: c# cmd 7zip

所以,我在我正在使用的程序中使用Execute Shell,我需要通过命令压缩一些文件,我决定使用Nuzet附带的7zip。我还为最终用户添加了一条消息,说明该过程已完成,我在该过程实际完成前30秒收到该消息,因此在消息传递30秒后我必须能够打开/访问该zip文件。 / p>

有没有办法跟踪它或显示消息,直到完成该过程?尝试使用线程,if语句,whiles,do while,以及更多但仍然没有运气,这是一些代码如何寻找压缩部分

  public static void ZipFiles()
    {
        ExecuteShell ES = new ExecuteShell();
        ES.ExecuteCommand("cmd.exe", zipCmdText, false, false, 
        "C:\\Windows\\System32", "");           
    }

   and the execute shell part:

public bool ExecuteCommand(string EXEName, string Command, bool 
blnCallWaitForExit, bool blnBatchFile, string strWorkingDirectory, string 
ExecutionDoneMessage)
{
    bool blnCommandExited = false;
    try
    {
        KillAllCommandExe(EXEName);


        List<string> OutPut = new List<string>();

        objProcess = new Process();

        objProcess.OutputDataReceived += new DataReceivedEventHandler(objProcess_OutputDataReceived);
        objProcess.ErrorDataReceived += new DataReceivedEventHandler(objProcess_ErrorDataReceived);
        objProcess.Exited += new EventHandler(objProcess_Exited);
        objProcess.StartInfo.FileName = EXEName;
        if(!blnBatchFile)
            objProcess.StartInfo.Arguments = Command;

        objProcess.StartInfo.UseShellExecute = false;
        if (strWorkingDirectory != "")
            objProcess.StartInfo.WorkingDirectory = strWorkingDirectory;


        objProcess.StartInfo.RedirectStandardInput = true;
        objProcess.StartInfo.RedirectStandardOutput = true;
        objProcess.StartInfo.RedirectStandardError = true;
        objProcess.StartInfo.CreateNoWindow = true;
        objProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

        objProcess.Start();

        objProcess.BeginOutputReadLine();
        objProcess.BeginErrorReadLine();

        if (blnCallWaitForExit == true)
        {
            objProcess.WaitForExit(9000);
        }


        if (objProcess.HasExited)
        {
            CloseProcess();
        }
        blnCommandExited = true;
    }
    catch (Exception ex)
    {

    }
    return blnCommandExited;
}

还有其他更好/更快的压缩选项可以达到这个效果吗?

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

7zip很好但是你注意到它需要一些管道才能使用它,因为它是一个外部工具。相反,您可以使用System.IO.Compression.ZipFileSystem.IO.Compression命名空间中的其他内容。这将为您提供更好的UI集成。它自.NET Framework 4.5以来可用