C#使用kernel32.dll读写INI文件的案例详解

c#使用kernel32.dll读写ini文件的案例详解

ini文件是一种常见的配置文件格式,通常用于存储应用程序的配置信息。在c#中,我们可以使用kernel32库来读写ini文件

 

引用

//写入
[dllimport("kernel32.dll")]
private static extern long writeprivateprofilestring(string section, string key, string val, string    filepath);
//读取
[dllimport("kernel32.dll")]
private static extern int getprivateprofilestring(string section, string key, string def,  stringbuilder retval, int size, string inipath);

writeprivateprofilestring

向ini文件中写入数据:

  • section:ini文件中的一个段落名称。
  • key:ini文件中的一个键名称。
  • val:要写入的值。
  • filepath:ini文件的完整路径。

getprivateprofilestring

从ini文件中读取数据:

  • section:ini文件中的一个段落名称。
  • key:ini文件中的一个键名称。
  • def:如果没有找到指定的键,则返回的默认值。
  • retval:用于存储读取到的值的stringbuilder对象。
  • size:retval对象的大小。
  • inipath:ini文件的完整路径。

 

写入

public void iniwritevalue(string section, string key, string value)
{
 string inipath = ".config.ini";
 writeprivateprofilestring(section, key, value, inipath);
}
public void iniwritevalues() {
 iniwritevalue("config", "comport", comport);
}

 

读取

 stringbuilder temp = new stringbuilder(500);
 getprivateprofilestring("config", "player", "", temp, 500, ".\config.ini");
 player = temp.tostring();

 

封装示例

使用了dllimport来调用windows api函数,用于读取和写入ini文件。虽然这段代码可以正常工作,但是它存在一些问题:

  • 可读性差:代码中的参数名称和变量名不够清晰,难以理解。
  • 可维护性差:如果我们需要在代码中多次使用这些函数,我们需要在每个使用它们的地方都写一遍dllimport声明,这样会导致代码重复和维护困难。

为了解决这些问题,可以对代码进行重构。可以将dllimport声明封装到一个类中,这样就提高代码的可读性和可维护性。同时,为函数添加更具描述性的参数名称和变量名,这样可以使代码更加易于理解。

重构代码:

class inifile
{   
  // 引入kernel32.dll库,用于写入ini文件
  [dllimport("kernel32.dll")]
  private static extern long writeprivateprofilestring(string section, string key, string val, string filepath);
  // 引入kernel32.dll库,用于读取ini文件
  [dllimport("kernel32.dll")]
  private static extern int getprivateprofilestring(string section, string key, string def, stringbuilder retval, int size, string inipath);
  // ini文件路径
  private string _filepath;
  // 构造函数,初始化ini文件路径
  public inifile(string filepath)
  {
      _filepath = filepath;
  }
  // 写入ini文件
  public void writevalue(string section, string key, string value)
  {
      writeprivateprofilestring(section, key, value, _filepath);
  }
  // 写入ini文件
  public string readvalue(string section, string key, string defaultvalue = "")
  {
      stringbuilder sb = new stringbuilder(255);
      getprivateprofilestring(section, key, defaultvalue, sb, 255, _filepath);
      return sb.tostring();
  }
}

我们将dllimport声明封装到了一个名为inifile的类中。这个类包含了两个函数:writevalue和readvalue,用于写入和读取ini文件中的值。我们还添加了一个构造函数,用于初始化ini文件的路径。

现在,我们可以在代码中使用inifile类来读取和写入ini文件中的值。这样可以提高代码的可读性和可维护性,同时也可以避免代码重复。

相关文章