2010-01-25 63 views
2

當我使用StreamWriter.WriteLine寫入時,它將CRLF添加到字符串併發送(到SerialPort)。當我在同一C#程序中使用StreamReader.ReadLine讀取類似於下面的數據的字符串時,它只讀取由第一個(char)13.ToString()表示的第一個CR,而不是由表示的CRLF (char)13.ToString()+(char)10.ToString()組合。StreamReader中模糊的換行符

string messageHeader = ((char)2).ToString() + 
     @"1H|\^&|REMISOL|P|1|20010212161505SS" + 
     ((char)13).ToString() + 
     ((char)3).ToString() + 
     "E5" + 
     ((char)13).ToString() + 
     ((char)10).ToString(); 

我該如何讓它讀到最後的CRLF塊,而不是停在CR?

謝謝。

回答

4

StreamReader.ReadLine的文檔說明:一行被定義爲一個字符序列,後跟一個換行符(「\ n」),一個回車符(「\ r」)或一個回車符後緊跟一個換行符(「\ r \ n」)

您需要使用讀取和讀取,直到您手動遇到\ r \ n。

0

如果您使用的SerialPort class,您可以手動設置NewLine property到任何你需要(這是LF(炭10)在默認情況下,雖然)

+0

我確實嘗試過,但並沒有改變上述行爲,這大概是因爲LF,CR和CRLF是3種不同的方式來結束這條線。 – Chakra 2010-01-26 07:54:42

1

StreamReader.ReadLine()最多讀取,但不包括中,下一個CR,LF或CRLF。我只是試了一下你的示例代碼,它會返回2行,讀取並不包括尾部CRLF。如果這不是你所看到的,那麼你的StreamReader有一些不同,你將不得不向我們展示完整的代碼來重複這個問題。

這是你所看到的,而不是你想要的,你將不得不更詳細地描述問題。