2010-01-25 58 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有一些不同,你将不得不向我们展示完整的代码来重复这个问题。

这是你所看到的,而不是你想要的,你将不得不更详细地描述问题。