利用ini保存之前填写过的配置,下一次程序重启不需要再次重新配置,直接读取文件内保存过的数据即可。
连接PLC为例,使用hsl模拟plc来测试
编写下列程序,保存好plc配置后下一次参数会自动变为已保存的配置参数,并测试是否可以读写数据
保存数据 将文本内容赋值给对应plc的参数并将其保存ini文件中
public void UpDataUI_PLC(bool bFromUI)
{
if (bFromUI)
{
m_Plc.m_Plctype = (PlcType)System.Enum.Parse(typeof(PlcType), cb_PlcType.Text);
m_Plc.m_strIP = tb_PLC_IP.Text;
m_Plc.m_nPort = Convert.ToInt32(tb_PLC_Port.Text);
}
else
{
cb_PlcType.SelectedIndex = Convert.ToInt32(m_Plc.m_Plctype);
tb_PLC_IP.Text = m_Plc.m_strIP;
tb_PLC_Port.Text = m_Plc.m_nPort.ToString();
}
}
private void btn_Save_PLC_Click(object sender, EventArgs e)
{
UpDataUI_PLC(true);
bool bRes = m_Plc.SaveParam();
MessageBox.Show($"保存PLC数据{(bRes ? "成功" : "失败")}!");
}
public bool SaveParam()
{
IniHelper.Write(m_strName, "Type", m_SavePath, m_Plctype.ToString());
IniHelper.Write(m_strName, "IP", m_SavePath, m_strIP);
IniHelper.Write(m_strName, "Port", m_SavePath, m_nPort);
return true;
}
保存后下次调用
//加载配置文件函数
public bool LoadParam()
{
try
{
string strPlcType = "";
IniHelper.ReadString(m_strName, "Type", m_SavePath, out strPlcType);
m_Plctype = (PlcType)System.Enum.Parse(typeof(PlcType), strPlcType);
IniHelper.ReadString(m_strName, "IP", m_SavePath, out m_strIP);
IniHelper.ReadInt(m_strName, "Port", m_SavePath, out m_nPort);
}
catch (Exception)
{
return false;
}
return true;
}
//在窗体加载时 判断配置文件中ip是否为空,不为空则
private void Form1_Load(object sender, EventArgs e)
{
LoadParam()
if (m_Plc.m_strIP!=null)
{
UpDataUI_PLC(false);
}
}
有关ini文件读取写入用到的代码
string m_SavePath = AppDomain.CurrentDomain.BaseDirectory + "Config/Param.ini";
//要判断当前文件是否存在,不然写入数据会出错
if (!File.Exists(m_SavePath))
{
// 使用StreamWriter写入INI文件
using (var file = File.Create(m_SavePath))
{
// 文件已创建,但在这里我们不写入任何内容
}
}
//Inihelper写入 这是写入为string类型
public static bool Write(string title, string name, string ini_path, string value)
{
long n = WritePrivateProfileString(title, name, value, ini_path);
return n > 0;
}
//其他类型要value.ToString()
//Inihelper读取
public static bool ReadString(string title, string name, string ini_path, out string strResult)
{
StringBuilder sb = new StringBuilder(255);
int n = GetPrivateProfileString(title, name, "", sb, 255, ini_path);
if (n > 0)
{
strResult = sb.ToString();
return true;
}
else
{
strResult = "";
return false;
}
}
再次打开参数会变成上次配置的数值显示出来,其他扫码枪等类似操作