سؤال

عندما أكتب باستخدام 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) افتراضيًا)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top