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
相关产品推荐
相关产品推荐

