c#实现ini文件读写类分享

时间:2022-08-31 09:47:48 


/// <summary>
    /// 读写INI文件的类。
    /// </summary>
    public class INIHelper
    {
        // 读写INI文件相关。
        [DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString", CharSet = CharSet.Ansi)]
        public static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
        [DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileString", CharSet = CharSet.Ansi)]
        public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

        [DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileSectionNames", CharSet = CharSet.Ansi)]
        public static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, int nSize, string filePath);

        [DllImport("KERNEL32.DLL ", EntryPoint = "GetPrivateProfileSection", CharSet = CharSet.Ansi)]
        public static extern int GetPrivateProfileSection(string lpAppName, byte[] lpReturnedString, int nSize, string filePath);


        /// <summary>
        /// 向INI写入数据。
        /// </summary>
        /// <PARAM name="Section">节点名。</PARAM>
        /// <PARAM name="Key">键名。</PARAM>
        /// <PARAM name="Value">值名。</PARAM>
        public static void Write(string Section, string Key, string Value, string path)
        {
            WritePrivateProfileString(Section, Key, Value, path);
        }


        /// <summary>
        /// 读取INI数据。
        /// </summary>
        /// <PARAM name="Section">节点名。</PARAM>
        /// <PARAM name="Key">键名。</PARAM>
        /// <PARAM name="Path">值名。</PARAM>
        /// <returns>相应的值。</returns>
        public static string Read(string Section, string Key, string path)
        {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp, 255, path);
            return temp.ToString();
        }

        /// <summary>
        /// 读取一个ini里面所有的节
        /// </summary>
        /// <param name="sections"></param>
        /// <param name="path"></param>
        /// <returns></returns>
        public static int GetAllSectionNames(out string[] sections, string path)
        {
            int MAX_BUFFER = 32767;
            IntPtr pReturnedString = Marshal.AllocCoTaskMem(MAX_BUFFER);
            int bytesReturned = GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, path);
            if (bytesReturned == 0)
            {
                sections = null;
                return -1;
            }
            string local = Marshal.PtrToStringAnsi(pReturnedString, (int)bytesReturned).ToString();
            Marshal.FreeCoTaskMem(pReturnedString);
            //use of Substring below removes terminating null for split
            sections = local.Substring(0, local.Length - 1).Split('\0');
            return 0;
        }

        /// <summary>
        /// 得到某个节点下面所有的key和value组合
        /// </summary>
        /// <param name="section"></param>
        /// <param name="keys"></param>
        /// <param name="values"></param>
        /// <param name="path"></param>
        /// <returns></returns>
        public static int GetAllKeyValues(string section, out string[] keys, out string[] values, string path)
        {
            byte[] b = new byte[65535];

            GetPrivateProfileSection(section, b, b.Length, path);
            string s = System.Text.Encoding.Default.GetString(b);
            string[] tmp = s.Split((char)0);
            ArrayList result = new ArrayList();
            foreach (string r in tmp)
            {
                if (r != string.Empty)
                    result.Add(r);
            }
            keys = new string[result.Count];
            values = new string[result.Count];
            for (int i = 0; i < result.Count; i++)
            {
                string[] item = result[i].ToString().Split(new char[] { '=' });
                if (item.Length == 2)
                {
                    keys[i] = item[0].Trim();
                    values[i] = item[1].Trim();
                }
                else if (item.Length == 1)
                {
                    keys[i] = item[0].Trim();
                    values[i] = "";
                }
                else if (item.Length == 0)
                {
                    keys[i] = "";
                    values[i] = "";
                }
            }

            return 0;
        }

    }

标签:ini文件读写
0
投稿

猜你喜欢

  • IntelliJ IDEA 的使用界面图文教程

    2022-10-01 17:24:59
  • Java新手学习之IO流的简单使用

    2023-08-09 15:57:33
  • SpringBoot读取资源目录中JSON文件的方法实例

    2023-04-26 02:00:42
  • java中压缩文件并下载的实例详解

    2022-01-01 04:59:12
  • Java日常练习题,每天进步一点点(10)

    2022-08-11 21:55:53
  • SpringBoot接入钉钉自定义机器人预警通知

    2022-07-23 00:29:45
  • 一篇文章带你深入了解Java类加载

    2023-06-11 22:12:00
  • Java毕业设计实战之在线高中考试系统的实现

    2021-07-04 06:15:20
  • idea 实现搜索jdk中的类和包操作

    2022-06-02 22:54:47
  • C#中TransactionScope的使用小结

    2022-02-15 01:53:08
  • 深入分析C# 线程同步

    2023-05-09 00:49:44
  • Java中DecimalFormat用法及符号含义

    2023-05-04 04:31:14
  • SpringMVC源码解读之 HandlerMapping - AbstractDetectingUrlHandlerMapping系列初始化

    2023-02-12 16:14:21
  • 深入解析JVM之内存结构及字符串常量池(推荐)

    2023-01-02 19:48:20
  • Android存储字符串数据到txt文件

    2021-11-05 21:55:16
  • JAVA多线程并发下的单例模式应用

    2022-09-15 01:27:31
  • Java8 HashMap键与Comparable接口小结

    2023-11-29 10:10:31
  • C语言实现矩阵翻转(上下翻转、左右翻转)

    2023-10-24 22:42:36
  • Mybatis执行流程、缓存原理及相关面试题汇总

    2022-10-15 23:30:28
  • Android基础知识之frame动画效果

    2022-07-10 03:46:17
  • asp之家 软件编程 m.aspxhome.com