实现目的:
此功能只是实现c#配置文件读取到窗口页面的一些控件上显示方便后期的使用
ini配置文件
新建一个项目
首先第一步肯定是新建一个c#项目我这边是WindowsForms项目(windows窗体应用程序)因此接下来是在这个基础下进行的(如果怕建项目出错可以先查询一下)
新建config.ini文件
毕竟是用配置文件肯定是先有一个配置文件
注意:
新建的路径需要和我们软件运行程序在一起也就是程序的.exe文件放在一起,也可以放到其他位置但是一般都放在.exe文件同级文件夹因为需要程序给别人的时候依赖什么都在此文件夹中
读取写入config.ini文件的功能的实现
using System.Runtime.InteropServices;
using System.Text;
namespace ReadFile
{
class IniFile
{
private string filepath;
public IniFile(string path)
{
filepath = path;
}
[DllImport("kernel32")]
private static extern long GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filepath);
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filepath);
public string ReadValue(string section, string key)
{
StringBuilder sb = new StringBuilder(225);
long l = GetPrivateProfileString(section, key, "", sb, 255, filepath);
return sb.ToString();
}
public void WriteValue(string section,string key,string value)
{
WritePrivateProfileString(section, key, value, filepath);
}
public void WriteComPorts(string ports)
{
string section = "setting";
string key = "Ports";
WriteValue(section, key, ports);
}
public string[] ReadComPorts()
{
string section = "setting";
string key = "Ports";
string ports = ReadValue(section, key);
return ports.Split(',');
}
public void WriteBaudPorts(string baud)
{
WriteValue("setting", "Baud", baud);
}
public string[] ReadBaudPorts()
{
string bauds = ReadValue("setting", "Baud");
return bauds.Split(',');
}
}
}
这边没有做什么特殊的处理完全就是读取以及写入方便后期使用,此次目的最重要的就是能将数据读取出就行
[DllImport("kernel32")]这个是win自带的一个库直接用就可以不需要添加什么依赖啥的
然后就是怎么使用这个类了
请看下面这段代码
string relativePath = "config.ini"; // 相对路径
string basePath = System.IO.Directory.GetCurrentDirectory(); // 当前工作目录
string fullPath = System.IO.Path.Combine(basePath, relativePath); // 构建完整路径
IniFile iniFile = new IniFile(fullPath);
string[] ComPorts = iniFile.ReadComPorts();
comboBox3.Items.AddRange(ComPorts);
string[] BaudPorts = iniFile.ReadBaudPorts();
comboBox4.Items.AddRange(BaudPorts);
这段代码写在窗口控件代码那不要写在空间里,外边就行
comboBox3.Items.AddRange(ComPorts);
comboBox4.Items.AddRange(BaudPorts);这两段前端comboBox3、4是我控件名称
这些就可以实现读取配置文件的内容了
配置文件内容
[setting]
Ports=COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,COM10
Baud=9600,19200,38400
精髓
接下来这里非常重要
配置文件我们可以看成三部分section,key,value
section就是配置文件最前面的setting它就像一个大包里面包含key和value;一个软件可以有不止一个section
key:这个就像索引我们必须通过key才可以获得数据,相当于数据的身份码平时一个key对应至少一个value
value就是数值
运行结果
App.config文件
废话不多说第一步还是新建一个项目但是从第二步开始有区别了
找到App.config文件
这个文件一般存在于引用下边会有一个App.config点击进去就可以编写了
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<appSettings>
<add key="com" value ="COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,COM10,COM11,COM12,COM13,COM14,COM15,COM16,COM17,COM18,COM19,COM20,COM21,COM22,COM23,COM24,COM25 "/>
<add key="baud" value ="9600,19200,38400,57600,115200"/>
</appSettings>
</configuration>
这个就是里面的内容可能最开始没有<appSettings></appSettings>这里面包含的这一部分然后我添加了并在里面写了我自己需要的内容
添加依赖
这一步比较关键同时也比较容易忽略
在程序引用界面右击引用点击添加引用,点击程序集选择框架选择System.Configuration勾选起来点击确定就可以
调用代码
string comPorts = ConfigurationManager.AppSettings["com"];
if (!string.IsNullOrEmpty(comPorts))
{
string[] comPortsArray = comPorts.Split(',');
comboBox1.Items.AddRange(comPortsArray);
}
else
{
// 如果配置文件中未指定串口信息,可以提供一个默认值或者进行其他处理
comboBox1.Items.Add("COM1");
comboBox1.Items.Add("COM2");
}
string baudPort = ConfigurationManager.AppSettings["baud"];
if (!string.IsNullOrEmpty(baudPort))
{
string[] baudPortsArray = baudPort.Split(',');
comboBox2.Items.AddRange(baudPortsArray);
}
else
{
comboBox2.Items.Add("9600");
}
前面还需要加一个using System.Configuration;因为需要调用configurationManager需要使用,然后调用里面的AppSettings去读取key,再通过key读值
注意
这个config文件和ini一致都存在于运行程序同文件夹最重要的是这个文件的命名为XX.exe.config不要搞混了
运行效果
结尾
好了到此结束可能有很多不足也说的不是很详细,但是确实是能运行并且实现效果的,最主要需要明白三个东西一个section,一个key,一个value这三个东西想明白就不会差太多了,非常简单但是也折磨了我一天希望对你有帮助,注意我的所有调用不是写在控件里哦是写在窗口文件的一个总的里面好了废话不多说全部代码贴出来
//这个是窗口体界面的代码
using System;
using System.Configuration;
using System.Windows.Forms;
namespace ReadFile
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string comPorts = ConfigurationManager.AppSettings["com"];
if (!string.IsNullOrEmpty(comPorts))
{
string[] comPortsArray = comPorts.Split(',');
comboBox1.Items.AddRange(comPortsArray);
}
else
{
// 如果配置文件中未指定串口信息,可以提供一个默认值或者进行其他处理
comboBox1.Items.Add("COM1");
comboBox1.Items.Add("COM2");
}
string baudPort = ConfigurationManager.AppSettings["baud"];
if (!string.IsNullOrEmpty(baudPort))
{
string[] baudPortsArray = baudPort.Split(',');
comboBox2.Items.AddRange(baudPortsArray);
}
else
{
comboBox2.Items.Add("9600");
}
string relativePath = "config.ini"; // 相对路径
string basePath = System.IO.Directory.GetCurrentDirectory(); // 当前工作目录
string fullPath = System.IO.Path.Combine(basePath, relativePath); // 构建完整路径
IniFile iniFile = new IniFile(fullPath);
string[] ComPorts = iniFile.ReadComPorts();
comboBox3.Items.AddRange(ComPorts);
string[] BaudPorts = iniFile.ReadBaudPorts();
comboBox4.Items.AddRange(BaudPorts);
}
}
}
//这个是我写的一个读ini的类
using System.Runtime.InteropServices;
using System.Text;
namespace ReadFile
{
class IniFile
{
private string filepath;
public IniFile(string path)
{
filepath = path;
}
[DllImport("kernel32")]
private static extern long GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filepath);
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filepath);
public string ReadValue(string section, string key)
{
StringBuilder sb = new StringBuilder(225);
long l = GetPrivateProfileString(section, key, "", sb, 255, filepath);
return sb.ToString();
}
public void WriteValue(string section,string key,string value)
{
WritePrivateProfileString(section, key, value, filepath);
}
public void WriteComPorts(string ports)
{
string section = "setting";
string key = "Ports";
WriteValue(section, key, ports);
}
public string[] ReadComPorts()
{
string section = "setting";
string key = "Ports";
string ports = ReadValue(section, key);
return ports.Split(',');
}
public void WriteBaudPorts(string baud)
{
WriteValue("setting", "Baud", baud);
}
public string[] ReadBaudPorts()
{
string bauds = ReadValue("setting", "Baud");
return bauds.Split(',');
}
}
}
声明
这个是我空闲之余想着不会学学的有很多不足请见谅,搬砖新手程序员🐒一枚,很拉,但希望可以给你带来帮助,网上我看了挺多教程但是好像说的一堆但是我没理解所以才写此篇章,就当作一个自己的笔记