C#里面怎样读取ini文件

ini文件也是一种配置文件,在早期的windows桌面系统中主要是用ini文件作为系统的配置文件,从win95以后开始转向使用注册表,但是还有很多系统配置是使用ini文件的。其实INI文件就是简单的text文件,只不过这种txt文件要遵循一定的INI文件格式。“.ini ”就是英文 “initialization”的头三个字母的缩写;当然ini file的后缀名也不一定是".ini"也可以是".cfg",".conf ”或者是".txt"。

INI文件由节、键、值组成。  


   [section]  

参数(键=值)
   name=value

注解
   注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。

 

NI文件的格式很简单,最基本的三个要素是:parameters,sections和comments。

什么是parameters?

INI所包含的最基本的“元素”就是parameter;每一个parameter都有一个name和一个value,name和value是由等号“=”隔开。name在等号的左边。

如:

name = value

什么是sections ?

所有的parameters都是以sections为单位结合在一起的。所有的section名称都是独占一行,并且sections名字都被方括号包围着([ and ])。在section声明后的所有parameters都是属于该section。对于一个section没有明显的结束标志符,一个section的开始就是上一个section的结束,或者是end of the file。Sections一般情况下不能被nested,当然特殊情况下也可以实现sections的嵌套。

section如下所示:

[section]

什么是comments ?

在INI文件中注释语句是以分号“;”开始的。所有的所有的注释语句不管多长都是独占一行直到结束的。在分号和行结束符之间的所有内容都是被忽略的。

注释实例如下:

;comments text

 

了解了ini文件,接下来就是怎样在代码里面读取文件内容的事情了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace TestReadIni
{
  class Program
  {
    static void Main(string[] args)
    {
      String sPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
      sPath = sPath.Substring(0, sPath.LastIndexOf("\\"));

      string filename = sPath + "\\" + "SMALLERP.ini";

      string strServer = GetIniFileString("DataBase", "Server", "",filename);

       string strUserID = GetIniFileString("DataBase", "User", "",filename);

      string strPwd = GetIniFileString("DataBase", "Password", "",filename);

      WriteFile("DataBase", "Password","1",filename);

      Console.WriteLine("Server = " + strServer);
      Console.WriteLine("user = " + strUserID);
      Console.WriteLine("Password = " + strPwd);

    }

    [DllImport("kernel32")]
    public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal,int size, string filePath);

    [DllImport("kernel32")]
    public static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);

    public static string GetIniFileString(string section, string key, string def, string filePath)
    {
      StringBuilder temp = new StringBuilder(1024);
      GetPrivateProfileString(section, key, def, temp, 1024, filePath);
      return temp.ToString();
    }

    public static void WriteFile(string section, string key, string value, string filePath)
    {
      WritePrivateProfileString(section,key,value,filePath);
    }

  }
}

posted @ 2020-07-16 14:08  Struggle_Rui  阅读(1690)  评论(0编辑  收藏  举报