2012-09-20 174 views
2

我使用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; 
     } 
    } 
} 

}

回答

1

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

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(); 
     } 
    } 
+0

謝謝......這很有效。 – RAC

+0

@ user1687153:接受答案比說謝謝更好。 – Cdeez

0

您正在打開並重復覆蓋同一文件。使用FileStream(或更好的StreamWriter)類,保持流與串口一起打開,並在完成後關閉它。另外,如果您通過串行端口傳輸文本,則可能需要考慮更容易使用的SerialPort.ReadLine()方法。

+0

我試圖使用ReadLine,但出於某種原因,它不適用於我的代碼。正如我所提到的,我對C#非常陌生,希望能夠提供一個能夠與我的代碼一起工作的示例。再次感謝。 – RAC

0

延長@ Alan的回答,您可以使用File.AppendAllText而不是File.WriteAllText,它將一次又一次地覆蓋文件。因此,如果在檢查文件之前收到空文本,則文件將被空文本覆蓋。