一、ini文件格式
二、新建IniHelper类,用于读写Ini文件
using System.Runtime.InteropServices;
using System.Text;
namespace INITest
{
class IniHelper {
private string sPath = "";
public IniHelper(string path) {
sPath = path;
}
/// <summary>
/// 写入INI文件
/// </summary>
/// <param name="section">节点名称[如[TypeName]]</param>
/// <param name="key">键</param>
/// <param name="val">值</param>
/// <param name="filepath">文件路径</param>
/// <returns></returns>
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filepath);
/// <summary>
/// 读取INI文件
/// </summary>
/// <param name="section">节点名称</param>
/// <param name="key">键</param>
/// <param name="def">值</param>
/// <param name="retval">stringbulider对象</param>
/// <param name="size">字节大小</param>
/// <param name="filePath">文件路径</param>
/// <returns></returns>
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileInt(string section, string key, int def, string filePath);
/// <summary>
/// 写入
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <param name="iValue"></param>
public void WriteContentValue(string section, string key, string iValue) {
WritePrivateProfileString(section, key, iValue, sPath);
}
/// <summary>
/// 读取INI文件中的内容方法
/// </summary>
/// <param name="Section">键</param>
/// <param name="key">值</param>
/// <returns></returns>
public string ReadContentValue(string Section, string key) {
StringBuilder temp = new StringBuilder(1024);
GetPrivateProfileString(Section, key, "", temp, 1024, sPath);
return temp.ToString();
}
}
}
三、新建一个AxisParameter类,用于接收ini文件中的配置参数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace INITest
{
class AxisParameter
{
public int Ena; //使能驱动器
public UInt32 StepTime; //脉冲宽度
public int Pulpolar; //脉冲电平
public int Dirpolar; //方向电平
public double Vellim; //速度极限
public double Acclim; //加速度极限
public int Plimitena; //硬件限位
public int Plimitpolar; //限位电平
public int Nlimitena; //硬件限位
public int Nlimitpolar; //限位电平
public int Almena; //伺服报警使能
public int Almpolar; //伺服报警电平
public int INPena; //伺服到位使能
public int INPpolar; //伺服到位电平
public double Encpfactor; //反馈倍率
public int Encpena; //反馈使能
public int Encpmode; //反馈计数模式
public int Encpdir; //反馈计数方向
int res; //保留
}
}
四、新建一个Global类用于初始化ini文件并通过调用上一个类的方法来读写ini文件
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace INITest
{
class Global
{
private static string _filePath = Application.StartupPath;//ini文件路径
private static string _fileName = @"\IMC_cfg.ini";//ini文件名
private static string _fullPath = _filePath + _fileName;//ini文件全路径(路径+名称)
private static IniHelper iniHelper;
/// <summary>
/// 生成iniHelper对象
/// </summary>
static Global()
{
if (!Directory.Exists(_filePath))
{
Directory.CreateDirectory(_filePath);
}
if (File.Exists(_fullPath))
{
iniHelper = new IniHelper(_fullPath);
}
else
{
iniHelper = new IniHelper(_fullPath);
}
}
//读取ini文件的值
public static AxisParameter[] GetAxisParameterList()
{
AxisParameter[] axisParameterList = new AxisParameter[4];
var section = "STEPTIME";
//获取steptime[0]-steptime[3]的值
for (int i = 0; i < 4; i++)
{
axisParameterList[i] = new AxisParameter();
axisParameterList[i].StepTime = Convert.ToUInt32(iniHelper.ReadContentValue(section, "steptime[" + i.ToString() + "]"));
}
return axisParameterList;
}
/// <summary>
/// 写ini文件
/// </summary>
public static void SetAxisParameter()
{
var section = "STEPTIME";
//修改ini文件中steptime[0]的值为0000
iniHelper.WriteContentValue(section, "steptime[0]", "0000");
}
}
}
五、新建一个Form界面,增加两个按钮用于获取和写入ini文件
private void button1_Click(object sender, EventArgs e)
{
this.textBox1.Clear();
AxisParameter[] axisParameters = new AxisParameter[4];
axisParameters = Global.GetAxisParameterList();
foreach (AxisParameter axisParameter in axisParameters)
{
this.textBox1.Text += axisParameter.StepTime.ToString() + " ";
}
}
private void button2_Click(object sender, EventArgs e)
{
Global.SetAxisParameter();
}