不能放弃INI配置信息存取方式

.Net平台开发已经全面展开,微软为我们提供了非常庞大的.Net类库,程序员手中的武器也比以往任何时候来的都要先进。就拿桌面程序配置信息的保存来说,.Net框架为我们准备了三条路径:

  • 将信息放置在资源中,即保存在Settings.settings中,在运行时从资源中检索;
  • 保存在App.config文件中,App.config文件其实就是xml文件,以xml标准架构保存配置信息;
  • 将配置信息保存在注册表中,即使用 Registry 类。

这三种方法在.Net下都被原生的支持,只需些许代码就能很好的对配置信息进行存取。其实,资深程序员应该非常清楚,早先在Windows下存取程序配置信息的地方是在.ini文件中,譬如控制早期Windows启动参数的配置文件即是win.ini。.ini文件就是纯文本文件,将程序配置信息放置在文本文件中好处其实也蛮多的:

  • 双击*.ini文件即可用记事本打开并修改之;
  • 当程序位置移动或重新部署时,只需将附带的*.ini文件一起拷贝,那么配置信息也被保留下来。

在MSDN中找了找关于.Net框架如何支持INI文件的东西,结果却并不乐观。也许是出于安全考虑,微软放弃了INI存取配置信息的方式?!这么一来我们存取*.ini文件就需要调用Win32 API了。无论怎么样,在某些场合使用INI文件绝对会事半功倍。

我们以保存和读取窗体位置及大小为例演示如何存取*.ini文件,核心代码如下:

using System.Runtime.InteropServices;
​
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string inifilename);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder rtnVal, int size, string inifilename);
​
private string IniFileName = "";
​
public void WriteString(string Section, string Key, string Value)
{
    WritePrivateProfileString(Section, Key, Value, IniFileName);
}
​
public string ReadString(string Section, string Key)
{
    StringBuilder temp = new StringBuilder(255);
    int i = GetPrivateProfileString(Section, Key, "", temp, 255, IniFileName);
    return temp.ToString();
}
​
public Form1()
{
    InitializeComponent();
    IniFileName = Application.StartupPath + "\\Test.ini";
    this.Top = Convert.ToInt32((ReadString("Location", "Top").ToString()));
    this.Left = Convert.ToInt32((ReadString("Location", "Left").ToString()));
    this.Width = Convert.ToInt32((ReadString("Size", "Width").ToString()));
    this.Height = Convert.ToInt32((ReadString("Size", "Height").ToString()));
}
​
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    WriteString("Location", "Top", this.Top.ToString());
    WriteString("Location", "Left", this.Left.ToString());
    WriteString("Size", "Width", this.Width.ToString());
    WriteString("Size", "Height", this.Height.ToString());
}

本文没有包含容错代码,就此代码网友务必在程序运行文件夹下放置Test.ini文件,其内容如下:

[Location] Top = 0 Left = 0

[Size] Width = 200 Height = 100

该示例在Windows XP SP3 + Visual Studio 2008 SP1 下编译调试通过。

不能放弃INI配置信息存取方式

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动到顶部