2

C#获取ini文件中section节点下全部key的值

 8 months ago
source link: https://blog.51cto.com/u_16459851/8925078
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

C#获取ini文件中section节点下全部key的值

精选 原创

Y学习中 2023-12-21 16:15:58 博主文章分类:ini文件读写 ©著作权

文章标签 键值对 数组 字典 ini 文章分类 代码人生 阅读数191

本文不对ini文件的基本读取、写入key的value方法做详细介绍;仅介绍获取ini文件中section节点下全部key的值的方法;

C#获取ini文件中section节点下全部key的值_数组
  • ini文件内容
C#获取ini文件中section节点下全部key的值_键值对_02

步骤:打开VS软件,新建项目后,在界面添加按钮控件和textbox控件,以便查看效果;

C#获取ini文件中section节点下全部key的值_字典_03
C#获取ini文件中section节点下全部key的值_数组_04
C#获取ini文件中section节点下全部key的值_字典_05
  • 添加引用;
using System.Runtime.InteropServices;//添加引用
C#获取ini文件中section节点下全部key的值_键值对_06
  • 声明API;
        /// <summary>

        /// 获取某个指定节点(Section)中所有KEY和Value

        /// </summary>

        /// <param name="lpAppName"></param>

        /// <param name="lpszReturnBuffer"></param>

        /// <param name="nSize"></param>

        /// <param name="lpFileName"></param>

        /// <returns></returns>

        [DllImport("kernel32.dll")]

        private static extern int GetPrivateProfileSection(string lpAppName, byte[] lpszReturnBuffer, int nSize, string lpFileName);
C#获取ini文件中section节点下全部key的值_ini_07
  • 获取结果后保存到string[]数组中
        /// <summary>

        /// 获取INI文件中指定节点(Section)中的所有条目(key=value形式)

        /// </summary>

        /// <param name="iniFile"></param>

        /// <param name="section"></param>

        /// <returns></returns>

        public static string[] INIGetAllItems2(string iniFile, string section)

        {

            byte[] buffer = new byte[2048];


            GetPrivateProfileSection(section, buffer, 2048, iniFile);

            String[] tmp = Encoding.Default.GetString(buffer).Trim('\0').Split('\0');


            return tmp;

        }
  • 获取结果后保存到字典
public static Dictionary<string, string> GetKeys(string iniFile, string category)

        {

            //获取INI文件中指定节点(Section)中的所有条目(key=value形式)

            string[] tmp = INIGetAllItems2(iniFile, category);

            //也可将数组转变成字典

            Dictionary<string, string> result = new Dictionary<string, string>();

            if (tmp[0] != "")

            {

                foreach (String entry in tmp)

                {

                    string[] v = entry.Split('=');

                    result.Add(v[0], v[1]);

                }

            }

            return result;

        }
  • 通过按钮调用方法;可以使用string[]数组保存数据,也可使用字典保存数据;本文演示字典保存数据的方法;
private void button1_Click(object sender, EventArgs e)

        {

            Dictionary<string, string> keyValues = new Dictionary<string, string>();

            string iniFile = "D:\\Test.ini";

            keyValues= GetKeys(iniFile, "Config");

          

            //遍历键值对

            foreach (var keyvalue in keyValues)

            {

                textBox1.AppendText(string.Format("键值对:{0},{1},{2}", keyvalue.Key.ToString(), keyvalue.Value.ToString(),"\r\n"));

            }

        }
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Runtime.InteropServices;//添加引用

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;


namespace WindowsFormsApp1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }


        #region  API声明


        /// <summary>

        /// 获取某个指定节点(Section)中所有KEY和Value

        /// </summary>

        /// <param name="lpAppName"></param>

        /// <param name="lpszReturnBuffer"></param>

        /// <param name="nSize"></param>

        /// <param name="lpFileName"></param>

        /// <returns></returns>

        [DllImport("kernel32.dll")]

        private static extern int GetPrivateProfileSection(string lpAppName, byte[] lpszReturnBuffer, int nSize, string lpFileName);



        #endregion



        /// <summary>

        /// 获取INI文件中指定节点(Section)中的所有条目(key=value形式)

        /// </summary>

        /// <param name="iniFile"></param>

        /// <param name="section"></param>

        /// <returns></returns>

        public static string[] INIGetAllItems2(string iniFile, string section)

        {

            byte[] buffer = new byte[2048];


            GetPrivateProfileSection(section, buffer, 2048, iniFile);

            String[] tmp = Encoding.Default.GetString(buffer).Trim('\0').Split('\0');


            return tmp;

        }



        public static Dictionary<string, string> GetKeys(string iniFile, string category)

        {

            //获取INI文件中指定节点(Section)中的所有条目(key=value形式)

            string[] tmp = INIGetAllItems2(iniFile, category);

            //也可将数组转变成字典

            Dictionary<string, string> result = new Dictionary<string, string>();

            if (tmp[0] != "")

            {

                foreach (String entry in tmp)

                {

                    string[] v = entry.Split('=');

                    result.Add(v[0], v[1]);

                }

            }

            return result;

        }


        private void button1_Click(object sender, EventArgs e)

        {

            Dictionary<string, string> keyValues = new Dictionary<string, string>();

            string iniFile = "D:\\Test.ini";

            keyValues= GetKeys(iniFile, "Config");

          

            //遍历键值对

            foreach (var keyvalue in keyValues)

            {

                textBox1.AppendText(string.Format("键值对:{0},{1},{2}", keyvalue.Key.ToString(), keyvalue.Value.ToString(),"\r\n"));

            }

        }

    }

}
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK