ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 不能放弃INI配置信息存取方式

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

原创 Linux操作系统 作者:草上爬 时间:2009-01-10 13:43:55 0 删除 编辑
.Net平台开发已经全面展开,微软为我们提供了非常庞大的.Net类库,程序员手中的武器也比以往任何时候来的都要先进。就拿桌面程序配置信息的保存来说,.Net框架为我们准备了三条路径:

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

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

1、双击*.ini文件即可用记事本打开并修改之;
2、当程序位置移动或重新部署时,只需将附带的*.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 下编译调试通过。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14325734/viewspace-536281/,如需转载,请注明出处,否则将追究法律责任。

上一篇: delegate_event.rar
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2008-07-29

  • 博文量
    37
  • 访问量
    604281