Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#进程/cmd输出解析变量_C#_Process_Cmd_Progress Bar - Fatal编程技术网

c#进程/cmd输出解析变量

c#进程/cmd输出解析变量,c#,process,cmd,progress-bar,C#,Process,Cmd,Progress Bar,我正在制作gui到rtmp插件,这是命令行程序。我需要一种方法来读取cmd程序输出数据的三个变量:下载,时间和完成。 在cmd中,输出为exsample“3000kb/12秒(12%)”,不带“”。如何在没有kb的情况下下载3000个变量,在没有秒的情况下下载12个时间,在没有()和%的情况下下载12个完成。下面是我运行cmd进程的代码 int downloaded, time, done; var proc = new Process {

我正在制作gui到rtmp插件,这是命令行程序。我需要一种方法来读取cmd程序输出数据的三个变量:下载,时间和完成。 在cmd中,输出为exsample“3000kb/12秒(12%)”,不带“”。如何在没有kb的情况下下载3000个变量,在没有秒的情况下下载12个时间,在没有()和%的情况下下载12个完成。下面是我运行cmd进程的代码

    int downloaded, time, done;
    var proc = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "Data/yle-dl/yle-dl.exe",
                Arguments = "-o pasila.flv http://areena.yle.fi/tv/1755554 --rtmpdump rtmpdump.exe ",
                UseShellExecute = false,
                RedirectStandardOutput = true,
                CreateNoWindow = false
            }
        };

        proc.Start();

如果命令行已经有了某种输出,您可以使用


否则,您可以将程序集添加到程序引用中,并访问程序用来指示您的状态的变量(如果存在)。

您可以使用正则表达式捕获程序输出并解析值。注意,您还应该捕获经常发生的错误输出,正常输出作为错误处理

 Process process = new Process();
 process.StartInfo.FileName = "Data/yle-dl/yle-dl.exe";
 process.StartInfo.Arguments = "-o pasila.flv http://areena.yle.fi/tv/1755554 --rtmpdump rtmpdump.exe ";
 process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
 process.StartInfo.CreateNoWindow = true;
 process.StartInfo.RedirectStandardOutput = true;
 process.StartInfo.RedirectStandardError = true;
 process.StartInfo.UseShellExecute = false;
 process.OutputDataReceived += new DataReceivedEventHandler(ReadOutput);
 process.ErrorDataReceived += new DataReceivedEventHandler(ReadOutput);

 process.Start();
 process.BeginOutputReadLine();
 process.BeginErrorReadLine();

 process.WaitForExit();


  private static void ReadOutput(object sender, DataReceivedEventArgs e)
  {
     if (e.Data != null)
     {
       Match m = Regex.Match(e.Data, "(\\d+)[^0-9]*(\\d+)[^0-9]*(\\d+)[^0-9]");
       if (m.Success)
       {
        textBox1.Text = m.Result("$1");
        string time = m.Result("$2");
        string percent = m.Result("$3");
       }
     }
  }

@user1992794正确,
textBox1.Text=m.Result($1”)I get error“名称'm'在当前上下文中不存在”@user1992794请查看我的编辑并阅读有关作用域的内容now I get error“非静态字段、方法或属性需要对象引用”@user1992794 mate,您将获得所有可能的错误,直到您理解所做的操作。我的代码正在运行,我不知道您是如何使用或更改它的。