一、前言

      在以前的项目中一般会把一下用户可以设置是值放到xml文件中,但是最近的项目中,项目组长说要用ini文件。ini文件小编也接触过,但是对他的读取还是有一定的挑战的。下面就对ini文件进行读取。

二、ini文件介绍

      通常C#使用基于XML的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到INI文件。

      但C#本身并不具备读写INI文件的API,只有通过调用非托管代码的方式,即系统自身的API才能达到所需的目的。

格式

节(section)

节用方括号括起来,单独占一行,例如:
[section]

键(key)

键(key)又名属性(property),单独占一行用等号连接键名和键值,例如:
name=value

注释(comment)

注释使用英文分号(;)开头,单独占一行。在分号后面的文字,直到该行结尾都全部为注释,例如:
; comment text
[host]
# 设置服务器的ip- 王雷-2017年4月10日11:27:17
ip=222.168.33.117

[ports]
# 设置服务器端口-王雷-2017年4月10日11:27:31
port=8080

三、读取方法

      在读取之前呢,需要我们引入API:

using System;
using System.Runtime.InteropServices;
using System.Text;
namespace INIDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            WritePrivateProfileString("Demo", "abc", "123", "c:\\demo.ini");
            StringBuilder temp = new StringBuilder();
            GetPrivateProfileString("Demo", "abc", "", temp, 255, "c:\\demo.ini");
            Console.WriteLine(temp);
            Console.ReadLine();
        }
        [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
        private static extern bool WritePrivateProfileString(
            string lpAppName, string lpKeyName, string lpString, string lpFileName);
        [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
        private static extern int GetPrivateProfileString(
            string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString,
            int nSize, string lpFileName);
    }
}

      把方法封装,调用就可以:

#region 读Ini文件

        public static string ReadIniData(string Section, string Key, string NoText, string iniFilePath)
        {
            if (File.Exists(iniFilePath))
            {
                StringBuilder temp = new StringBuilder(1024);
                GetPrivateProfileString(Section, Key, NoText, temp, 1024, iniFilePath);
                return temp.ToString();
            }
            else
            {
                return String.Empty;
            }
        }

        #endregion

        #region 写Ini文件

        public static bool WriteIniData(string Section, string Key, string Value, string iniFilePath)
        {
            if (File.Exists(iniFilePath))
            {
                bool OpStation = WritePrivateProfileString(Section, Key, Value, iniFilePath);
                if (OpStation)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

        #endregion

四、小结

      通过这次的学习,对配置文件了解更加深刻了,读取中也有了深刻的认识。键值对的ini配置文件也是很不错的。