C# 如何将数据连续写入文本文件?

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

每秒钟我只想把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 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没有额外的逻辑来确保您已经读取了完整的数据序列,这只是自找麻烦。