У меня есть некоторый код, который принимает данные последовательного порта, и оба (1) отображают их в окне терминала, а (2) добавляет / записывает данные в файл .txt с меткой времени.
Проблема заключается в том, чточто, хотя данные правильно отображаются в окне терминала в приложении C #, функция AppendToFile будет генерировать несколько файлов, то есть фрагментов / пакетов, которые должны быть сшиты вместе.
Я попытался добавить условный оператор, ища последние символы строки (так как они известны), но это не работает.
Я также пробовал Thread.Спите, ожидая ~ 3-4 секунды, и вместо 4 файлов, которые должны быть сшиты вместе, будут созданы 2 файла, один с первыми несколькими символами строки и второй файл с остальной / большей частью строки.
Вот функция 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);
}
}