• C#读写INI文件


     

    INI文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,TSVN的配置文件就是使用INI存储的,下面我们介绍下使用C#读写INI文件的整体思路。

    封装WindowAPI

    首先,读写INI文件需要用到WindowsAPI中的WritePrivateProfileStringGetPrivateProfileString方法,然而怎么在C#中调用这两个方法呢?

    C#提供了DllImportAttribute属性,可将该属性应用于方法,该属性提供对从非托管 DLL 导出的函数进行调用所必需的信息。作为最低要求,必须提供包含入口点的 DLL 的名称。

    在此,我们需要调用包含上文提到的两个读写INI文件方法的DLLkernel32),语法如下:[DllImport("kernel32")]

    然后根据API需要的参数对两个方法进行封装。我们将其封装在IniAccessor类中,封装完毕的方法为:

    1. WritePrivateProfileString

    [DllImport("kernel32")]

           internal static extern long WritePrivateProfileString(string section, string key, string value, string filePath);

    参数说明:

    参数名称

    数据类型

    说明

    返回值

    long

    非零表示写入成功,等于零表示写入失败

    section

    String

    要在其中写入新字串的小节名称。这个字串不区分大小写

    key

    String

    要设置的项名或条目名。这个字串不区分大小写。用null可删除这个配置节的所有设置项

    value

    String

    指定为这个项写入的字串值。用Null表示删除这个项现有的字串

    filePath

    String

    指定INI文件的路径(包括文件名);如果没有指定完整路径名,则windows会在windows目录查找文件。如果文件没有找到,则函数会创建它

    2. GetPrivateProfileString

    [DllImport("kernel32")]

       internal static extern long GetPrivateProfileString(string section, string key, string defaultValue, StringBuilder refValue, int size, string filePath);

    参数说明:

    参数名称

    数据类型

    说明

    返回值

    long

    复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中止字符。如lpReturnedString缓冲区不够大,不能容下全部信息,就返回nSize-1(若lpApplicationNamelpKeyNameNULL,则返回nSize-2

    section

    String

    欲在其中查找条目的配置节名称。这个字串不区分大小写。如设为null,就在lpReturnedString缓冲区内装载这个ini文件所有配置节的列表

    key

    String

    欲获取的项名或条目名。这个字串不区分大小写。如设为null,就在lpReturnedString缓冲区内装载指定配置节所有项的列表

    defaultValue

    String

    指定的条目没有找到时,refValue的默认值,可设为空

    refValue

    String

    指定一个字串缓冲区,存储获取到的指定条目的值,长度至少为size

    size

    int

    指定装载到lpReturnedString缓冲区的最大字符数量

    filePath

    String

    指定INI文件的路径(包括文件名);如果没有指定完整路径名,则windows会在windows目录查找文件

    注意:用 DllImport 属性修饰的方法必须具有 extern 修饰符。

    C#中调用并封装为IniFile

    1.写入一个配置节

    public bool IniWriteValue(string section, string key, string value)

        {

            if (IniAccessor.WritePrivateProfileString(section, key, value, _path) != 0)

                    return true;

                else

                    return false;

        }

    2.读取一个配置节

     public string IniReadValue(string section, string key)

        {

            StringBuilder value = new StringBuilder(255);

            IniAccessor.GetPrivateProfileString(section, key, null, value, 255, _path);

            return value.ToString();

         }

    调用实例

    下面的代码是在config文件中的miscellany配置节下,添加enable-auto-props=yes属性。

    private static void EnableAutoProps()

       {

          string filePath = @"C:\config";

          string section = "miscellany";

          string key = "enable-auto-props";

     

          IniFile iniFile = new IniFile(filePath);

          iniFile.IniWriteValue(section, key, "yes");

       }

    其中IniFile类内封装了读取及写入方法,且在初始化时,已将INI文件路径传入,以便后续的读写操作。

  • 相关阅读:
    WinRT下GridView/ListView随滚动条自动加载
    C# 获取属性名
    Xaml System Resources 系统资源
    WinRT常见而又困扰的问题
    .net 解压 zip 包完全不用第三方 library (.net unzip zip file without third party library)
    团队.Net技术手册,现代.Net技术栈摸索梳理
    C# 构建可扩展的应用程序(插件)
    分别用MVC,MCP,MVVM实现一个井字棋游戏
    Android系统属性
    ThreadLocal 和 Countdaowlatch
  • 原文地址:https://www.cnblogs.com/xiongpq/p/1662303.html
Copyright © 2020-2023  润新知