From 2f9011d1b287d346f8282402401fad3688471a3f Mon Sep 17 00:00:00 2001 From: zqm Date: Fri, 31 Oct 2025 13:23:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0Camera.cs=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=AD=E6=B8=A9=E5=BA=A6=E6=95=B0=E6=8D=AECSV=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E6=A0=BC=E5=BC=8F=EF=BC=8C=E7=A1=AE=E4=BF=9D=E7=AC=A6?= =?UTF-8?q?=E5=90=88CSV=E6=A0=87=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Camera.cs | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index eecde29..00850bc 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -1827,37 +1827,47 @@ namespace JoyD.Windows.CS.Toprie // 如果用户选择了文件路径 if (saveFileDialog.ShowDialog() == DialogResult.OK) { - // 获取当前温度数据 - TemperatureData temperatureData = _deviceManager.GetCurrentTemperatureData(); + // 使用已缓存的温度数据 + TemperatureData temperatureData; + lock (_lastTemperatureDataLock) + { + temperatureData = _lastTemperatureData; + } if (temperatureData == null) { - MessageBox.Show("未能获取温度数据,请稍后再试。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show("没有可用的温度数据,请确保设备已连接且正在接收数据。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } - // 保存温度数据到文件 + // 保存温度数据到CSV文件 using (StreamWriter writer = new StreamWriter(saveFileDialog.FileName)) { - // 写入文件头部信息 - writer.WriteLine("# 温度数据文件"); + // 写入文件头部信息(以#开头的注释行不会被CSV解析器当作数据) + writer.WriteLine("# 温度数据文件 - CSV格式(逗号分隔值)"); writer.WriteLine($"# 生成时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}"); writer.WriteLine($"# 分辨率: {temperatureData.Width} x {temperatureData.Height}"); writer.WriteLine($"# 最高温度: {temperatureData.MaxTemperature:F2} °C"); writer.WriteLine($"# 最低温度: {temperatureData.MinTemperature:F2} °C"); writer.WriteLine($"# 平均温度: {temperatureData.AverageTemperature:F2} °C"); writer.WriteLine(); - writer.WriteLine("# 温度数据矩阵 (单位: °C)"); - writer.WriteLine(); - // 写入温度数据矩阵 + // 写入温度数据矩阵(CSV格式) for (int i = 0; i < temperatureData.Height; i++) { StringBuilder lineBuilder = new StringBuilder(); for (int j = 0; j < temperatureData.Width; j++) { - // 添加温度值,使用逗号分隔 - lineBuilder.Append($"{temperatureData.TemperatureMatrix[i, j]:F2}"); + // 获取温度值 + string tempValue = $"{temperatureData.TemperatureMatrix[i, j]:F2}"; + + // CSV标准格式:如果值包含逗号、引号或换行符,需要用引号包围并转义内部引号 + if (tempValue.Contains(',') || tempValue.Contains('"') || tempValue.Contains('\n')) + { + tempValue = $"\"{tempValue.Replace("\"", "\"\"")}\""; + } + + lineBuilder.Append(tempValue); if (j < temperatureData.Width - 1) { lineBuilder.Append(",");