【C#】 C# 配置文件读取数组:读 int[], float[], string[],bool[];读 int, float, string,bool;,错误输出,长度判定等


主要功能

  • 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R-G-B

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值