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

 更新时间:2023年05月19日 10:53:18   作者:叫我少年  
INI就是扩展名为"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文件中的值。这样可以提高代码的可读性和可维护性,同时也可以避免代码重复。

到此这篇关于C#使用kernel32.dll读写INI文件的文章就介绍到这了,更多相关c# kernel32.dll读写INI文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#拷贝文件简单实现方法

    C#拷贝文件简单实现方法

    这篇文章主要介绍了C#拷贝文件简单实现方法,主要分析了FileInfo类中CopyTo方法针对文件复制的操作技巧,非常简单实用,需要的朋友可以参考下
    2015-04-04
  • C#处理Paint事件的方法

    C#处理Paint事件的方法

    这篇文章主要介绍了C#处理Paint事件的方法,实例分析了C#使用Paint进行图形绘制的技巧,需要的朋友可以参考下
    2015-06-06
  • C#实现的文件压缩和解压缩类

    C#实现的文件压缩和解压缩类

    这篇文章主要介绍了C#实现的文件压缩和解压缩类,实例分析了C#针对文件压缩与解压缩的常用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • unity3d实现七天签到功能

    unity3d实现七天签到功能

    这篇文章主要为大家详细介绍了unity3d实现七天签到功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Unity3D实现摄像机镜头移动并限制角度

    Unity3D实现摄像机镜头移动并限制角度

    这篇文章主要为大家详细介绍了Unity3D实现摄像机镜头移动并限制角度,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • 聊聊C# 中HashTable与Dictionary的区别说明

    聊聊C# 中HashTable与Dictionary的区别说明

    这篇文章主要介绍了聊聊C# 中HashTable与Dictionary的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • c#实现在图上画汉字

    c#实现在图上画汉字

    这篇文章主要介绍了c#实现在图上画汉字方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • C#基础入门之算法:交换

    C#基础入门之算法:交换

    本文主要介绍了C#中算法:交换的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • 如何在C#9 中使用static匿名函数

    如何在C#9 中使用static匿名函数

    这篇文章主要介绍了如何在C#9中使用static匿名函数,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C#中控制远程计算机的服务的方法

    C#中控制远程计算机的服务的方法

    C#中控制远程计算机的服务的方法...
    2007-04-04

最新评论