簡體   English   中英

將數據寫入文本文件

[英]Writing data to text file

我正在使用COM端口(串行)發送和接收數據。 我寫了下面的代碼。 這實際上是我的第一個C#項目,因為我對此有些陌生。 我試圖將接收到的數據寫入桌面上的文本文件,該程序實際上創建了文件,但未寫入任何內容。 同樣,我可以在控制台上看到接收到的數據,但未將其寫入文本文件。 對於我做錯的任何幫助將不勝感激。

謝謝。 代碼如下。

class Program
{
    SerialPort p = new SerialPort("COM7", 300, Parity.None, 8, StopBits.One);
    string sbuffer = string.Empty;
    byte i = 0;
    static void Main(string[] args)
    {
        new Program();
    }

    Program()
    {
        string[] names = SerialPort.GetPortNames();
        Console.WriteLine("Serial ports:");
        foreach (string name in names)
        {
            Console.WriteLine(name);
        }
        Console.WriteLine("Using COM7");

        p.Open();


        string data_ = "$1RB\r";
        Console.WriteLine("Writing data: {0}",data_);
        p.Write(data_);
        p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
        Console.ReadKey();
        p.Close();
    }


    void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Thread.Sleep(5);
        sbuffer += (sender as SerialPort).ReadExisting();
        i++;
        if (i > 9)
        {
            Console.WriteLine(sbuffer);
          System.IO.File.WriteAllText(@"C:\Users\myname\Desktop\WriteText.txt", sbuffer);
            sbuffer = string.Empty;
        }
    }
}

}

您可以使用事件,也可以只使用此方法並將數據字符串傳遞給它。 只要存在,它將簡單地追加到文件中;如果不存在,則將創建一個新文件。 寫入的數據應與控制台屏幕上顯示的任何輸出相同。

    static void WriteOutputToTextFile(string _data)
    {
        string FolderName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);   //set destination as your desktop
        using (StreamWriter SW = new StreamWriter(FolderName + "\\test.txt", true))   //true makes it append to the file instead of overwrite
        {
            SW.WriteLine(_data);
            SW.Close();
        }
    }

您正在一次又一次打開並覆蓋同一文件。 請改用FileStream(或更好的StreamWriter)類,使流與串行端口一起打開,並在完成后關閉它。

另外,如果您通過串行端口傳輸文本,則可能需要考慮更易於使用的SerialPort.ReadLine()方法。

擴展File.AppendAllText的答案,您可以使用File.AppendAllText代替File.WriteAllText ,這將一次又一次覆蓋文件。 因此,如果在檢查文件之前收到空文本,則文件將被空文本覆蓋。

暫無
暫無

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

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