C#使用.ini配置文件存储数据


.ini文件是Windows系统常见的配置文件,也有不短的历史了。小时候玩电脑的时候就发现很多软件的根目录下存在一个名为config.ini的文件,可以用记事本打开,在其中很条理地罗列着一些软件的基础设置。虽然平时根本用不到它,但是关键时候还是可以帮得上忙的。记得初中的时候在电脑上运行一个忘记叫什么的游戏,在画面设置里把全屏打钩,点击应用之后,它黑屏了,点什么都没有用。强退重开也没有用,打开之后直接全屏然后黑掉。挠了半天脑袋之后,在文件夹里看到了一个类型是“配置设置”的文件,抱着好奇的态度打开之后,果然,里面有一行fullscreen=1。把1改成0,重新启动游戏,好,正常了。感谢那个不太人性化的游戏,让我学到了一个新技巧。不过也没什么用,后来用config.ini保存用户配置的软件几乎没有了…

config.ini之外,desktop.ini也是一个很著名的配置文件。只要显示隐藏文件,就可以在桌面看到它。之前还有一个病毒是通过篡改这个文件传播的,让这个文件一夜之间名声大振。可惜不是啥好名声。

ini文件

ini文件与注册表的结构有些相似之处,由节[section]、键[key]、值[value]组成,具体信息可参见百科词条。ini文件结构如下(本文代码所含名称均按此例):

[section_A]
key_A=value_A
key_B=value_B
[section_B]
key_A=value_C
key_B=value_D
INI

代码实现

近期因工作需要用Winform做一个demo,为了稍微人性化一点,避免一些配置信息每次启动都需要反复输入,打算用一个外部文件存储一下。这个文件就选了老熟人config.ini。用C#实现读写文件还是很简单的,几行代码就能实现。

首先需要引入命名空间与外部DLL,然后创建一个配置文件路径,此处为程序目录下的config.ini文件。

using System.Runtime.InteropServices;

[DllImport("kernel32")]
private static extern int WritePrivateProfileString(string section, string key, string value, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string value, StringBuilder result, int size, string filePath);

string filePath = Application.StartupPath + "\\config.ini";
C#

将数据写入文件:

private void WriteINI()
{
    WritePrivateProfileString("section_A", "key_A", "value_A", filePath);
    WritePrivateProfileString("section_A", "key_B", "value_B", filePath);
    WritePrivateProfileString("section_B", "key_A", "value_C", filePath);
    WritePrivateProfileString("section_B", "key_B", "value_D", filePath);
}
C#

从文件读取值:

private string ReadINI()
{
    StringBulider value = new StringBulider(1024);
    GetPrivateProfileString("section_A", "key_A", "", value, 1024, filePath);
    return value.ToString();
}
C#

谨以此文献给我那不太好使的大脑。(不写的话下次用到的时候就又不记得了)