我有一些获取串行端口数据的代码,(1)在终端窗口中显示它们,(2)将数据追加/写入带时间戳的.txt文件。
问题在于,尽管数据在C#应用程序的终端窗口中正确显示,但AppendToFile函数将生成多个文件,即必须缝合在一起的块/数据包。
我尝试添加条件语句,查找字符串的最后一个字符(因为已知),但这不起作用。
我也尝试了Thread.Sleep,等待大约3-4秒,这将生成2个文件,而不是生成需要缝合的4个文件,其中一个文件包含字符串的前几个字符,第二个文件以及字符串的其余/大部分。
这是AppendToFile函数:
private void AppendToFile(string toAppend)
{
string myFilePath = string.Format(@"C:\Battery_Report-{0:yyyy-MM-dd_hh-mm-ss-tt}.txt", DateTime.Now);
File.AppendAllText(myFilePath, toAppend);
}
这是不带条件语句的数据接收功能:
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// If the com port has been closed, do nothing
if (!comport.IsOpen)
{
return;
}
if (CurrentDataMode == DataMode.Text)
{
// Read all the data waiting in the buffer
string data = comport.ReadExisting();
if (data.Contains(" NOT ENTERED "))
{
// Display the text to the user in the terminal
Log(LogMsgType.Incoming, data);
// Append data to text file and save it on the common drive
AppendToFile(data);
}
}
}
或不带有if语句:
if (CurrentDataMode == DataMode.Text)
{
// Read all the data waiting in the buffer
string data = comport.ReadExisting();
// Display the text to the user in the terminal
Log(LogMsgType.Incoming, data);
// Append data to text file and save it on the common drive
AppendToFile(data);
}
同样,问题在于,尽管数据在C#应用程序的终端窗口中正确显示,但AppendToFile函数将生成多个文件,即应全部包含在单个文件中的块/数据包。
由于我的一位同事和jdweng的帮助,找到了解决方案:
if (CurrentDataMode == DataMode.Text)
{
// Read all the data waiting in the buffer
string data = comport.ReadExisting();
var done = false;
while (done == false)
{
data = data + comport.ReadExisting();
if(data.Contains("NCR18650BF"))
{
// Append data to text file and save it on the common drive
AppendToFile(data);
done = true;
}
}
// Display the text to the user in the terminal
Log(LogMsgType.Incoming, data);
rtfTerminal.Refresh();
Thread.Sleep(100);
}
}