簡體   English   中英

如何在C#中將控制台應用程序連續輸出到文本文件

[英]How to continuously output console application to text file in C#

我試圖用參數打開一個隱藏的控制台應用程序,並且基本上將其輸出連續記錄到文件中,直到停止為止。

我曾嘗試使用內存流並將其寫入文件,但它似乎確實起作用了一點。 現在,我正在嘗試利用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);

        }

我認為問題在於您對過程的引用超出了功能capturePackets的范圍。 您將需要為流程變量賦予與writer相同的作用域,或者在capturePackets函數中等待,直到使用WaitForExit()方法退出流程為止。 盡管您創建的過程繼續運行,但是當對其的引用超出范圍(通過過程變量)時,事件將停止處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM