如何在c#中连续输出控制台应用程序到文本文件

本文关键字:应用程序 控制台 文本 文件 输出 连续 | 更新日期: 2023-09-27 17:53:57

我试图打开一个隐藏的控制台应用程序的参数,基本上记录它的输出到一个文件,直到它被停止。

我试过使用内存流并将其写入文件,它似乎确实工作了一点。现在我正在尝试利用DataRecievedEvent,以便进一步处理输出。现在我没有得到任何输出。

下面是我打开控制台应用程序的方法:
StreamWriter writer = new StreamWriter("tsharkfieldoutput.txt", true)
private void capturePackets(int device)
        {
           string path =
                string.Format("-i " + device +
                              "  -O SNMP -T fields -e snmp.value.oid -e snmp.VarBind -e snmp.variable_bindings -e snmp.value.octets -e snmp.name -R udp src " +
                              destPort);
           string tshark = @"C:'Program Files'Wireshark'tshark.exe";
           ProcessStartInfo ps = new ProcessStartInfo();
           ps.FileName = tshark;
           ps.CreateNoWindow = true;
           ps.WindowStyle = ProcessWindowStyle.Hidden;
           ps.UseShellExecute = false;
           ps.CreateNoWindow = true;
           ps.RedirectStandardOutput = true;
           ps.Arguments = path;
           Process process = new Process();
           process.StartInfo = ps;
           process.Start();
           process.OutputDataReceived += new DataReceivedEventHandler(tshark_OutputDataReceived);
            //Not using stream reader any more.
           //StreamReader myStreamReader = process.StandardOutput;
            writer.Write("Begin tshark output- " + DateTime.Now + " - " + Environment.NewLine);
        }
        private void tshark_OutputDataReceived(object sender, DataReceivedEventArgs arg)
        {
            string tsharkline = arg.Data; //arg.Data contains the output data from the process...        
                writer.Write(tsharkline);
        }

如何在c#中连续输出控制台应用程序到文本文件

我认为问题是您对该过程的引用在函数capturePackets结束时超出了范围。您需要为进程变量提供与写入器相同的作用域,或者在capturePackets函数中等待,直到使用WaitForExit()方法退出进程。尽管您创建的进程继续运行,但是当对它的引用超出范围(通过进程变量)时,事件将停止被处理。