前提:小文件,参数配置类信息 ini类型保存
1.调用存储相关的API
调用之前先简单的封装一下:
封装目的:封装后的读函数比原函数入口参数更小,操作更便捷 封装后的写函数比原函数明确了读写失败的BOOL类型返回值
using System;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
namespace Save
{
public class SaveHelper
{
#region API函数声明
[DllImport("kernel32")]//返回0表示失败,非0为成功
private static extern long WritePrivateProfileString(string section, string key,
string val, string filePath); //写操作必要参数 节 键值 数值 路径
[DllImport("kernel32")]//返回取得字符串缓冲区的长度
private static extern long GetPrivateProfileString(string section, string key,
string def, StringBuilder retVal, int size, string filePath);
//读操作必要参数 节 键值 数值 def:默认值。如果指定的 key 在 section 中不存在,函数将返回此默认值。retVal:一个 StringBuilder 对象,用于存储从 .ini 文件中读取的值。这是一个输出参数。size:retVal 的最大容量。这通常设置为 StringBuilder 的大小。filePath:.ini 文件的完整路径。
#endregion
#region 读Ini文件
/// <summary>
/// 读取Ini配置信息
/// </summary>
/// <param name="Section">区域</param>
/// <param name="Key">键</param>
/// <param name="NoText">空字符串</param>
/// <param name="iniFilePath">文件路径</param>
/// <returns>值</returns>
///定义静态方法,无需实例化直接引用
public static string ReadIniData(string Section, string Key, string NoText, string iniFilePath)
{
if (File.Exists(iniFilePath)) //路径是否存在的判断
{
StringBuilder temp = new StringBuilder(1024);//大小为1K的临时变量用于存储
GetPrivateProfileString(Section, Key, NoText, temp, 1024, iniFilePath);
return temp.ToString(); //获得的数据作为商场返回值进行返回
}
else
{
return string.Empty;
}
}
#endregion
#region 写Ini文件
/// <summary>
/// 写入Ini配置信息
/// </summary>
/// <param name="Section">区域</param>
/// <param name="Key">键</param>
/// <param name="Value">值</param>
/// <param name="iniFilePath">文件路径</param>
/// <returns>是否成功</returns>
///定义静态类方法 进行写操作,成功返回 True,失败返回False
public static bool WriteIniData(string Section, string Key, string Value, string iniFilePath)
{
if (File.Exists(iniFilePath))
{
long OpStation = WritePrivateProfileString(Section, Key, Value, iniFilePath);
if (OpStation == 0)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
#endregion
}
}
2.封装后的API具有通用性,但是存储参数的结构体需要自己按需,下面根据自己的需要进行结构体建立:
public class ConfigInfo
{
//参数1
public double parameter1 { get; set; }
//参数2
public double parameter2 { get; set; }
//参数3
public double parameter3 { get; set; }
//参数4
public int parameter4 { get; set; }
//参数5
public int parameter5 { get; set; }
//参数6
public int parameter6 { get; set; }
}
加入从ini文件读的方法的方法:
public static class CommonMethods //创建静态类
{
//系统文件配置路径
public static string SysSetPath = string.Empty; //静态字符型变量
//读系统配置文件
public static ConfigInfo LoadSetings()
{
ConfigInfo ObjConfig = new ConfigInfo();
try
{
ObjConfig.parameter1 = Convert.ToDouble(SaveHelper.ReadIniData("参数段1", "参数1", "", SysSetPath));
ObjConfig.parameter2 = Convert.ToDouble(SaveHelper.ReadIniData("参数段1", "参数2", "", SysSetPath));
ObjConfig.parameter3 = Convert.ToDouble(SaveHelper.ReadIniData("参数段1", "参数3", "", SysSetPath));
ObjConfig.parameter4 = Convert.ToInt32(SaveHelper.ReadIniData("参数段2", "参数4", "", SysSetPath));
ObjConfig.parameter5 = Convert.ToInt32(SaveHelper.ReadIniData("参数段2", "参数5", "", SysSetPath));
ObjConfig.parameter6 = Convert.ToInt32(SaveHelper.ReadIniData("参数段2", "参数6", "", SysSetPath));
return ObjConfig;
}
catch (Exception)
{
return null;
}
加入写入ini方法:
private bool SaveConfig()
{
//文件是否存在不存在则创建
if (!File.Exists(CommonMethods.SysSetPath))
{
FileInfo fi = new FileInfo(CommonMethods.SysSetPath);
var di = fi.Directory;
di.Create();
FileStream fs = new FileStream(CommonMethods.SysSetPath, FileMode.Create);
fs.Close();
}
bool result = true;
result &= SaveHelper.WriteIniData("参数段1", "参数1", this.parameter1.Value.ToString(), CommonMethods.SysSetPath);
result &= SaveHelper.WriteIniData("参数段1", "参数2", this.parameter2.Value.ToString(), CommonMethods.SysSetPath);
result &= SaveHelper.WriteIniData("参数段1", "参数3", this.parameter3.Value.ToString(), CommonMethods.SysSetPath);
result &= SaveHelper.WriteIniData("参数段2", "参数4", this.parameter4.Value.ToString(), CommonMethods.SysSetPath);
result &= SaveHelper.WriteIniData("参数段2", "参数5", this.parameter5.Value.ToString(), CommonMethods.SysSetPath);
result &= SaveHelper.WriteIniData("参数段2", "参数6", this.parameter6.Value.ToString(), CommonMethods.SysSetPath);
return result;
}
节目效果:
需要代码可以私信我