1、功能描述
想要将串口助手接收区域内所有的内容保存下来
并且通过按钮,按下后,跳出一个弹窗,显示保存路径,并且保存txt文件
按下按钮,保存txt数据文件。
2、代码讲解
定义一个全局变量,接收所有的数据
在串口接收函数中,接收数据,并将每次的数据都累加到刚刚定义的全局变量中,
我这里是把接收的数据转换成了字符串,然后再累加的
按钮按下,调用保存数据函数
保存数据函数,按钮按下后,调用此函数,
首先创建一个保存文件对话框,让用户选择保存文件的路径和文件名。
如果用户成功选择了路径(即 ShowDialog
方法返回 DialogResult.OK
),
就创建一个 StreamWriter
对象来将之前存储的接收数据 receivedData
写入到用户指定的文件中。
3、代码实现
下面是代码
using System;
using System.IO;
using System.Windows.Forms;
namespace SerialPortAssistant
{
public partial class Form1 : Form
{
private string receivedData = ""; // 存储接收到的数据
public Form1()
{
InitializeComponent();
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
// 接收串口数据(以字节数组形式)
byte[] data = new byte[serialPort1.BytesToRead];
serialPort1.Read(data, 0, data.Length);
// 将字节数组转换为字符串并累加
receivedData += System.Text.Encoding.UTF8.GetString(data);
textBoxReceive.AppendText(System.Text.Encoding.UTF8.GetString(data)); // 在接收区域显示
}
private void buttonSave_Click(object sender, EventArgs e)
{
SaveData(); // 点击保存按钮时调用保存函数
}
private void SaveData()
{
// 创建一个保存文件对话框对象
SaveFileDialog saveFileDialog = new SaveFileDialog();
// 设置文件筛选器,只显示文本文件(*.txt)
saveFileDialog.Filter = "Text Files (*.txt)|*.txt";
// 显示保存文件对话框,并获取用户的选择结果
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
// 使用 using 语句确保在操作完成后正确释放资源
using (StreamWriter writer = new StreamWriter(saveFileDialog.FileName))
{
// 将接收到的数据写入到用户选择的文件中
writer.Write(receivedData);
}
}
}
}
}