C# 如何将数据连续写入文本文件?
每秒钟我只想把DateTimeHH:mm:ss和一个0或1作为一行写入文本文件 如果接收到的数据不包含UCAST且=g,则显示0,如果这是真的,则我要写入日期时间和1。它是接收消息的日期时间 我的问题是,我只得到DateTIme和1,但从未得到DateTIme和0。行总是被新的DateTime和1替换,因此旧的不再存在C# 如何将数据连续写入文本文件?,c#,datetime,streamwriter,C#,Datetime,Streamwriter,每秒钟我只想把DateTimeHH:mm:ss和一个0或1作为一行写入文本文件 如果接收到的数据不包含UCAST且=g,则显示0,如果这是真的,则我要写入日期时间和1。它是接收消息的日期时间 我的问题是,我只得到DateTIme和1,但从未得到DateTIme和0。行总是被新的DateTime和1替换,因此旧的不再存在 private void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs
private void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
recievdata = SerialPort.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
using (Stream stream2 = File.Open(path, FileMode.OpenOrCreate))
using (StreamWriter sWriter1 = new StreamWriter(stream2))
{
if (recievdata.Contains("UCAST") && recievdata.Contains("=g"))
{
sWriter1.Write(DateTime.Now.ToString("HH:mm:ss"));
sWriter1.Write(" ; ");
sWriter1.WriteLine(1);
if (SleepMovChar.InvokeRequired)
{
SleepMovChar.Invoke(new MethodInvoker(delegate
{ SleepMovChar.Series["Bevægelse"].Points.AddXY(xValue = DateTime.Now.ToString("HH:mm:ss"), 1); }));
SleepMovChar.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
}
}
else
{
sWriter1.Write(DateTime.Now.ToString("HH:mm:ss"));
sWriter1.Write(" ; ");
sWriter1.WriteLine(0);
timer1.Tick += new EventHandler(timer1_Tick);
}
}
}
指定FileMode.OpenOrCreate会在开始时打开文件,因此每次写入文件时都会覆盖现有内容。使用FileMode.appends打开。谢谢它的帮助。你能告诉我,为什么它只显示日期时间和1,而不显示0。当它没有收到字符串UCAST&&g时,它应该写下datetime和0。我认为FileMode.Append会按照前面的建议完成这项工作,但作为一个补充说明,您不应该快速打开和关闭文件,因为每当收到数据时都会发生此事件。打开文件一次,然后找到其他事件句柄在完成后关闭文件。也许你应该让它也输出recievdata,而不仅仅是DateTime,这样你就可以知道为什么它总是输入第一个分支。或者用断点调试它…这是代码永远不会写的唯一原因;0到该文件,而不是;1是正在读取的数据总是包含您要查找的文本。如果没有一个更好的代码示例,就不能再多说了。其他想法:您应该在这个方法之外打开文件一次,使用FileMode.Append、FileAccess.Write和FileShare.Read;你可能不想每次写作都订阅Tick;0; 而ReadExisting没有额外的逻辑来确保您已经读取了完整的数据序列,这只是自找麻烦。