我一直在努力解决问题,我真的不想解决以下问题:
我有一个能够侦听能够将数据上传到计算机的设备的软件应用程序。一旦捕获到这些数据,就会将其写入文本文件并存储起来供以后使用。
void DataRecieved(object sender, EventArgs e)
{
while ((bufferedData = comport.ReadLine()) != null)
{
uploadedData += bufferedData + Environment.NewLine;
}
comport.Close();
System.IO.StreamWriter writeUploadedPro = new System.IO.StreamWriter(uploadFilePath);
writeUploadedPro.Write(uploadedData);
writeUploadedPro.Close();
isUploadComplete = true;
}
我可以建立,接收和验证连接,我编写的内容确实会生成上传数据的文本文件,但数据包含的内容并不完整。
示例:
%
N0?77??.5???3
G0? X3.??? Z4.5??6
Z5.??
?3.5?76
G01 Z5.??
Z4.9471
X?.?3 Z4.???9
Z?.???6
?3.?? Z?.???
Z4.????
X3.7??4
G?? X3.???? ?4.5??6
M30
?
它有很多'?'哪个应该是字母或数字。我重申我对comport的设置(波特,数据,停止,奇偶校验,握手和COM名称都已正确指定)。我也尝试过设置ReadBufferSize,RecievedBytesThreshold,Encoding和NewLine设置。我对这些属性一点也不熟悉,我也没有找到MSDN来解释它们。
如果您对我在上传中获取不完整数据的原因有任何想法或建议,我们将不胜感激。谢谢你的帮助。
答案 0 :(得分:1)
我认为问题在于:
while ((bufferedData = comport.ReadLine()) != null)
尝试将语句更改为:
while(comport.BytesToRead>0)
{
uploadedData += comport.ReadExisting() + Environment.NewLine;
}
如果有帮助,请告诉我。
答案 1 :(得分:1)
问题在于您的编码。尝试将Encoding property更改为UTF8。默认值为ASCII。在ASCII编码中,任何大于0x7F的字符都默认转换为?
,因为ASCII只能达到0x7F(十进制127)。
虽然这可能会解决您的问题,但更好的方法是将数据读入字节数组,然后使用these encoding classes之一将其转换为正确的字符串。之所以有效是因为您不再将接收到的字节转换为字符串。您正在使用不执行字符串转换的Read(byte[], int, int)重载。纯字节。