主要功能
- 1.读取 int, float, string,bool(getInt, getFloat, getString,getBool)。
- 2.读取 int, float, string 数组(getIntArray, getFloatArray, getStringArray,getBoolArray)。
- 3.自动判断数组长度,错误输出等。
- 4.bool 类型大小写不敏感(true/false、TRUE/FALSE、TrUe/FaLsE 都可正确解析)。
配置文件示例
[imgPro]
//int
times = 3
//float
ratio = 0.32
//String
bar = small
//bool
bSave = true
//int数组
outImg_offsetX = -275, -354, -290, -70, -70, -290
//float数组
SFRthres_V = 0.2f, 0.2f, 0.2f, 0.2f, 0.2f, 0.2f
//String数组
Region = A1,B2,C3,D4
//bool数组
select = true,false,false,false
1 Config_Helper.cs文件 读取配置文件类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace FileHelper
{
public class Config_Helper
{
// **调用 Windows API 读取 INI 配置文件**
[DllImport("kernel32", CharSet = CharSet.Auto)]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32", CharSet = CharSet.Auto)]
private static extern long GetPrivateProfileString(string section, string key, string strDefault, StringBuilder retVal, int size, string filePath);
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
private static extern int GetPrivateProfileInt(string section, string key, int nDefault, string filePath);
// **INI 配置文件路径**
public string ConfigFilePath = Directory.GetCurrentDirectory() + @"\A5-config.ini";
#region 方法
/// <summary> 读取字符串 </summary>
public string GetIniString(string section, string key, string strDefault = "")
{
var temp = new StringBuilder(255);
long liRet = GetPrivateProfileString(section, key, strDefault, temp, 255, ConfigFilePath);
return liRet >= 1 ? temp.ToString() : strDefault;
}
/// <summary> 读取整数 </summary>
public int GetIniInt(string section, string key, int defaultValue = 0)
{
return GetPrivateProfileInt(section, key, defaultValue, ConfigFilePath);
}
/// <summary> 读取浮点数 </summary>
public float GetIniFloat(string section, string key, float defaultValue = 0f)
{
string valueStr = GetIniString(section, key, defaultValue.ToString());
return float.TryParse(valueStr, out float result) ? result : defaultValue;
}
/// <summary> 读取布尔值(支持大小写 "true"/"false" 和 "1"/"0") </summary>
public bool GetIniBool(string section, string key, bool defaultValue = false)
{
string valueStr = GetIniString(section, key, defaultValue ? "true" : "false").ToLower();
return (valueStr == "true" || valueStr == "1");
}
/// <summary> 读取整数数组 </summary>
public int[] GetIniIntArray(string section, string key, out string strErr)
{
return ParseArray(GetIniString(section, key, ""), int.TryParse, out strErr);
}
/// <summary> 读取浮点数组 </summary>
public float[] GetIniFloatArray(string section, string key, out string strErr)
{
return ParseArray(GetIniString(section, key, ""), float.TryParse, out strErr);
}
/// <summary> 读取字符串数组 </summary>
public string[] GetIniStringArray(string section, string key, out string strErr)
{
strErr = "";
string[] resultArray = GetIniString(section, key, "").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < resultArray.Length; i++)
{
resultArray[i] = resultArray[i].Trim();
}
return resultArray;
}
/// <summary> 读取布尔数组 </summary>
public bool[] GetIniBoolArray(string section, string key, out string strErr)
{
string[] strArray = GetIniStringArray(section, key, out strErr);
bool[] boolArray = new bool[strArray.Length];
for (int i = 0; i < strArray.Length; i++)
{
boolArray[i] = (strArray[i].Trim().ToLower() == "true" || strArray[i].Trim() == "1");
}
return boolArray;
}
/// <summary> 泛型方法:解析数组(适用于 int[], float[], bool[]) </summary>
private T[] ParseArray<T>(string valueStr, TryParseHandler<T> tryParse, out string strErr)
{
strErr = "";
string[] values = valueStr.Split(',');
T[] resultArray = new T[values.Length];
for (int i = 0; i < values.Length; i++)
{
if (!tryParse(values[i].Trim(), out resultArray[i]))
{
strErr = $"值 '{values[i]}' 无法转换为 {typeof(T).Name}";
return new T[0];
}
}
return resultArray;
}
private delegate bool TryParseHandler<T>(string s, out T result);
#endregion
}
}
2 Program.cs 文件调用读取配置文件
读取以下配置文件数据
using System;
namespace FileHelper
{
class Program
{
static void Main(string[] args)
{
Config_Helper config = new Config_Helper();
string errorMsg;
// **读取单个值**
int times = config.GetIniInt("imgPro", "times", 0);
float ratio = config.GetIniFloat("imgPro", "ratio", 0f);
string bar = config.GetIniString("imgPro", "bar", "default");
bool bSave = config.GetIniBool("imgPro", "bSave", false);
// **读取数组**
int[] outImg_offsetX = config.GetIniIntArray("imgPro", "outImg_offsetX", out errorMsg);
float[] SFRthres_V = config.GetIniFloatArray("imgPro", "SFRthres_V", out errorMsg);
string[] Region = config.GetIniStringArray("imgPro", "Region", out errorMsg);
bool[] Select = config.GetIniBoolArray("imgPro", "select", out errorMsg);
// **打印读取结果**
Console.WriteLine("\n==== 配置参数 ====");
Console.WriteLine($"times: {times}");
Console.WriteLine($"ratio: {ratio}");
Console.WriteLine($"bar: {bar}");
Console.WriteLine($"bSave: {bSave}");
Console.WriteLine("\noutImg_offsetX: " + string.Join(", ", outImg_offsetX));
Console.WriteLine("SFRthres_V: " + string.Join(", ", SFRthres_V));
Console.WriteLine("Region: " + string.Join(", ", Region));
Console.WriteLine("select: " + string.Join(", ", Select));
Console.ReadKey();
}
}
}
3 运行结果
==== 配置参数 ====
times: 3
ratio: 0.32
bar: small
bSave: True
outImg_offsetX: -275, -354, -290, -70, -70, -290
SFRthres_V: 0.2, 0.2, 0.2, 0.2, 0.2, 0.2
Region: A1, B2, C3, D4
select: True, False, False, False