簡體   English   中英

如何將連續控制台輸出保存到c#中的文本文件?

[英]How do I save continuous console output to a text file in c#?

我在編程方面相當不錯,而且我已經堅持了一段時間了。 我正在使用以下代碼將連續數據輸出流式傳輸到命令提示符。 如何在手動關閉提示后確保將輸出復制到文本文件中?

public static void Main(string[] args)
{
    Connector connector;
    Console.WriteLine("HelloEEG!");

    // Initialize a new Connector and add event handlers
    connector = new Connector();
    connector.DeviceConnected += new EventHandler(OnDeviceConnected);
    connector.DeviceConnectFail += new EventHandler(OnDeviceFail);
    connector.DeviceValidating += new EventHandler(OnDeviceValidating);

    // Scan for devices across COM ports
    // The COM port named will be the first COM port that is checked.
    connector.ConnectScan("COM40");

    // Blink detection needs to be manually turned on
    connector.setBlinkDetectionEnabled(true);

    Thread.Sleep(400000);

    System.Console.WriteLine("Goodbye.");
    connector.Close();
    Environment.Exit(0);
}

// Called when a device is connected 
static void OnDeviceConnected(object sender, EventArgs e)
{
    Connector.DeviceEventArgs de = (Connector.DeviceEventArgs)e;

    Console.WriteLine("Device found on: " + de.Device.PortName);

    de.Device.DataReceived += new EventHandler(OnDataReceived);
}

// Called when scanning fails

static void OnDeviceFail(object sender, EventArgs e)
{
    Console.WriteLine("No devices found! :(");
}

// Called when each port is being validated
static void OnDeviceValidating(object sender, EventArgs e)
{
    Console.WriteLine("Validating: ");
}

// Called when data is received from a device
static void OnDataReceived(object sender, EventArgs e)
{
    Device.DataEventArgs de = (Device.DataEventArgs)e;
    DataRow[] tempDataRowArray = de.DataRowArray;

    TGParser tgParser = new TGParser();
    tgParser.Read(de.DataRowArray);

    /* Loops through the newly parsed data of the connected headset*/
    // The comments below indicate and can be used to print out the different data outputs. 
    for (int i = 0; i < tgParser.ParsedData.Length; i++)
    {
        //string temp = tgParser.ParsedData[1].ToString;
        //Console.WriteLine(tgParser.ParsedData.Length + " + " + temp);

        if (tgParser.ParsedData[i].ContainsKey("Raw"))
        {
            //Console.WriteLine("Raw Value:" + tgParser.ParsedData[i]["Raw"]);
            //Console.WriteLine("Raw Value:" + tgParser.ParsedData[i]["Raw"]);
        }

        if (tgParser.ParsedData[i].ContainsKey("PoorSignal"))
        {
            //The following line prints the Time associated with the parsed data
            //Console.WriteLine("Time:" + tgParser.ParsedData[i]["Time"]);
            Console.WriteLine("Time:" + tgParser.ParsedData[i]["Time"]);

            //A Poor Signal value of 0 indicates that your headset is fitting properly
            Console.WriteLine("Poor Signal:" + tgParser.ParsedData[i]["PoorSignal"]);

            poorSig = (byte)tgParser.ParsedData[i]["PoorSignal"];
        }

        if (tgParser.ParsedData[i].ContainsKey("Attention"))
        {
            //Console.WriteLine("Att Value:" + tgParser.ParsedData[i]["Attention"]);
            Console.WriteLine("Att Value:" + tgParser.ParsedData[i]["Attention"]);
        }

        if (tgParser.ParsedData[i].ContainsKey("Meditation"))
        {
            //Console.WriteLine("Med Value:" + tgParser.ParsedData[i]["Meditation"]);
            Console.WriteLine("Med Value:" + tgParser.ParsedData[i]["Meditation"]);
        }

        if (tgParser.ParsedData[i].ContainsKey("EegPowerDelta"))
        {
            //Console.WriteLine("Delta: " + tgParser.ParsedData[i]["EegPowerDelta"]);
            Console.WriteLine("Delta: " + tgParser.ParsedData[i]["EegPowerDelta"]);
        }

        if (tgParser.ParsedData[i].ContainsKey("BlinkStrength"))
        {
            //Console.WriteLine("Eyeblink " + tgParser.ParsedData[i]["BlinkStrength"]);
            Console.WriteLine("Eyeblink " + tgParser.ParsedData[i]["BlinkStrength"]);
        }
    }
}

將每個控制台輸出記錄到文件會更好。 在手動關閉應用程序時,而不是等待寫入文件。 為了節省大量編碼,您可以使用log4net來處理日志記錄。

有幾種不同的方法可以解決這個問題,通過一些研究我相信你可以找到一些,但這是我將用於這個特定動作的解決方案:

正如瓊西在評論中提到的那樣,我首先要整理你的主要內容。 創建一個單獨的類以同時執行控制台writeline和文本輸出。

在這個類中,可能會使用循環將數據輸出到文件中,因此當手動關閉控制台時,您不必編寫邏輯代碼,這反過來會覆蓋意外錯誤和日志丟失。

這可能會奏效。

public static void WriteToFileAndConsole()
{
    string outFile = "ConsoleOut.txt";
    using (FileStream fileStream = new FileStream(outFile, FileMode.OpenOrCreate))
    {
        using (StreamWriter writer = new StreamWriter(fileStream))
        {
            using (TextWriter originalConsoleOut = Console.Out)
            {
                Console.SetOut(writer);
                Console.WriteLine("Hello To File");
                Console.SetOut(originalConsoleOut);
            }
        }
    }
    Console.WriteLine("Hello to console only");
}

暫無
暫無

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

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