65.9K
CodeProject 正在变化。 阅读更多。
Home

INI 处理程序

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (23投票s)

2004年4月27日

2分钟阅读

viewsIcon

104560

downloadIcon

2008

允许简单访问 ini 文件

引言

这个类 (IniHandler) 允许访问 Ini 文件。该类表示 ini 文件的内容,并具有列出、添加、删除和重命名类别(更像是节,但...随便什么)的功能,并且可以列出、创建、删除和修改键值对。该类具有静态方法来读取和写入文件。

使用代码

唯一的类是 IniHandler 类,所有内容都在其中实现。它不会直接将每次更改写入文件。相反,您获取所有数据,然后修改它,最后保存它。

第一部分处理所有结构

所有数据都保存在一个 System.Collections.SortedList 中,其中包含类别名称作为键,所有键值对作为值,也保存为 SortedList。因此,这意味着 SortedList 中包含 SortedList。它的行为类似于一个数组中的数组,但具有动态边界和字符串作为索引。

希望您理解了这一点,用法语或德语解释会更容易。当然,您可以列出所有类别以及指定类别中的所有键。当您想要修改或读取值时,只需要指定类别名称和键名称即可。

这段代码是你编写 ini 文件所需的一切

IniStructure Ini = new IniStructure();
Ini.AddCategory("NewSection");
Ini.AddValue("NewSection","NewKey","value");
Ini.ModifyValue("NewSection","NewKey","Newvalue");
IniStructure.WriteIni(Ini,"c:\filename.ini","Optional \n multiline \n comment");

那么 c:\filename.ini 文件将包含

# Optional
# multiline
# comment

[NewSection]
NewKey=NewValue

每次写入时,文件都会被清除并从头开始重写。

要读取一个 ini 文件,非常相似

IniStructure Ini = IniStructure.ReadIni("C:\filename.ini");
string[] allCategories = Ini.GetCategories();

// if Global would be a category, this lists all keys:
string[] keysInGlobal = Ini.GetKeys("Global");
 
// and if testkey would be a key in Global:
string testKeyValue = Ini.GetValue("Global","testkey");

还有一些方法可以按索引列出类别和键值对,但它们仅用于在保存期间遍历所有类别和键。

关注点

这是我第一次使用 SortedLists,并且首先尝试在没有它们的情况下编写此代码,但我很高兴我找到了它们,因为这使得代码更加简单。还有一些事情要做,例如错误处理:因为大多数方法只返回布尔值,所以你只能知道是否发生错误,而不能知道更多。诸如不正确的名称(在类别名称中没有 '=', '[', ']' 等)之类的错误会被处理,但仅此而已。肯定还有改进的空间,但情况总是如此,不是吗?

历史

  • 4 月 17 日:第一个版本。
  • 5 月 29 日:Bug 修复 - IniStructure.ReadIni(string) 现在可以读取只读 ini 文件,因为它使用 FileAccess.Read 参数打开文件。

© . All rights reserved.