سلوك خط جديد غامض في StreamReader
-
22-09-2019 - |
سؤال
عندما أكتب باستخدام StreamWriter.writeline ، فإنه يضيف CRLF إلى السلسلة ويرسلها (إلى SerialPort).
عندما قرأت سلسلة في نفس برنامج C# باستخدام StreamReader.ReadLine مع بيانات كما هو موضح أدناه ، فإنها تقرأ فقط حتى أول CR تمثلها أول (char) 13.ToString () ، وليس CRLF الذي يمثله (char) 13.ToString () + (char) 10.ToString () مجموعة.
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؟
شكرًا.
المحلول
ملاحظات وثائق StreamReader.Readline: يتم تعريف سطر على أنه سلسلة من الأحرف متبوعة بتغذية سطر (" n") ، أو عودة النقل (" r") أو عودة عربة تليها على الفور خلاصة خط (" r ن")
ستحتاج إلى استخدام القراءة والقراءة حتى تواجه r n يدويًا.
نصائح أخرى
StreamReader.ReadLine()
يقرأ ما يصل إلى ، ولكن لا يشمل ، CR التالي ، LF ، أو CRLF. لقد جربته للتو على رمز العينة الخاص بك ويعيد سطرين ، وقراءة ما يصل إلى ولا يشمل CRLF المتخلف. إذا لم يكن هذا ما تراه ، فهناك شيء مختلف عن StreamReader
وسيتعين عليك أن ترينا رمزًا كاملًا يكرر المشكلة.
هل هذا ما تراه ، وهو ليس ما تريد ، سيكون عليك وصف المشكلة بمزيد من التفصيل.
إذا كنت تستخدم فئة SerialPort, ، يمكنك ضبط يدويًا خاصية NewLine إلى كل ما تحتاجه (إنه LF (char 10) افتراضيًا)