2

我一直在尝试解决问题,但我真的没有任何想法要解决以下问题:

我有一个软件应用程序,它能够监听能够将数据上传到计算机的设备。捕获此数据后,会将其写入文本文件并存储以供以后使用。

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 对解释它们有帮助。

如果您对我上传的数据行不完整有任何想法或建议,我们将不胜感激。谢谢您的帮助。

4

2 回答 2

1

我认为问题在于:

while ((bufferedData = comport.ReadLine()) != null)

尝试将语句更改为:

    while(comport.BytesToRead>0)
{
uploadedData += comport.ReadExisting() + Environment.NewLine;
}

让我知道这是否有帮助。

于 2012-09-25T21:00:03.413 回答
1

问题出在您的编码中。尝试将Encoding 属性更改为 UTF8。默认值为 ASCII。在 ASCII 编码中,任何大于 0x7F 的字符都会?默认转换为 a,因为 ASCII 最多只能达到 0x7F(十进制的 127)。

尽管这可能会解决您的问题,但更好的方法是将数据读入字节数组,然后使用这些编码类之一将其转换为正确的字符串。之所以可行,是因为您不再将接收到的字节转换为字符串。您正在使用不进行字符串转换的Read(byte[], int, int)重载。它的纯字节。

于 2012-09-25T21:04:36.643 回答