You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Windows Forms中如何将JSON数据流追加保存到文本文件?

问题分析与修复方案

核心问题

你的代码存在两个关键错误,导致无法实现需求:

  • 每次接收新JSON时都删除原有文件并创建新文件,直接清空了之前的所有历史记录
  • 循环写入10000次当前接收到的单条JSON,导致文件里全是重复的同一条数据

修复后的代码

void ReceiveData() //This function is used to listen for messages from the flight simulator
{
    string path = @"c:\temp\BLACKBOX.txt"; // 把路径定义提到循环外,避免重复创建
    // 提前创建文件(如果不存在),避免首次追加时出错
    if (!File.Exists(path))
    {
        File.Create(path).Close();
    }

    while (true)
    {
        NetworkStream stream = client.GetStream();
        byte[] buffer = new byte[256];
        int bytesRead = stream.Read(buffer, 0, buffer.Length);

        if (bytesRead > 0)
        {
            string jsonreceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            TelemetryUpdate telemetry = serializer.Deserialize<TelemetryUpdate>(jsonreceived);
            
            this.Invoke(new Action(() => { 
                TelemetryReceivedLabel.Text = jsonreceived; 
            }));

            Updatelabels(telemetry);
                
            // 使用追加模式写入,每次只写当前接收的JSON并换行
            using (StreamWriter sw = new StreamWriter(path, true)) // 第二个参数true表示开启追加模式
            {
                sw.WriteLine(jsonreceived); // WriteLine自动添加换行符,保证每条JSON单独一行
            }
        }
    }
}

关键修改说明

  • 移除文件删除操作:不再每次清空原有文件,保留历史记录
  • 启用追加模式:StreamWriter(path, true)中的true参数让新内容直接写到文件末尾,不会覆盖原有内容
  • 删除无效循环:去掉10000次的重复写入逻辑,每次接收仅保存当前的JSON数据
  • 自动换行处理:使用WriteLine代替Write,自动在每条JSON后添加换行符,保证记录格式清晰
  • 提前初始化文件:首次运行时如果目标文件不存在,先创建文件避免追加操作抛出异常

内容的提问来源于stack exchange,提问作者roadgh1256

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:30:45