当前位置: 移动技术网 > IT编程>开发语言>c# > .NET开源类库Nini手册(INI、XML、注册表的配置应用)-中文翻译

.NET开源类库Nini手册(INI、XML、注册表的配置应用)-中文翻译

2019年12月02日  | 移动技术网IT编程  | 我要评论
作为开发人员,您始终需要处理应用程序配置数据。常见的示例是INI 文件,XML文件, .NET配置文件(也称为“ .config”),Windows注册表和命令行(argv)参数。配置文件的优点是它们加载速度快,不占用大量空间且易于编辑。Nini是一个功能强大的 .NET配置库,旨在帮助快速构建高度... ...

nini .net配置库()
vb代码的注释我保留了原文注释,它和c#注释的内容是一样的,下载链接在文章末尾。

1.简介

1.1什么是应用程序配置数据?

作为开发人员,您始终需要处理应用程序配置数据。常见的示例是ini 文件,xml文件, .net配置文件(也称为“ .config”),windows注册表和命令行(argv)参数。配置文件的优点是它们加载速度快,不占用大量空间且易于编辑。

1.2问题

尝试创建配置文件访问方案不能满足程序员或最终用户的需求。为了给出真实的生活场景,我为一个使用windows注册表api(应用程序编程接口)配置其原始程序的组织工作。后来,他们开发了自己的asp配置类。大约在同一时间,另一个小组开发了一个api,该api可从数据库中获取数据。然后,当asp.net出现时,他们开始使用web.config。在短短的几年之内,配置数据源的数量就从一增加到了四个!不用说,获取配置数据通常成为一项艰巨的任务。以下是可以改进配置管理的三个主要方面:

  • api
    开发人员使用配置文件格式,以使其应用程序在尽可能短的时间内运行。但是,通常在事后才添加用于访问此数据的api,从而导致api不够灵活。在很小的应用程序中,这可能不是问题,但是随着程序代码库的增长,配置信息通常会遍及整个应用程序代码。
  • 最终用户
    配置文件通常不会考虑最终用户。通常,配置选项是简洁的编程术语,只有最勇敢的用户才敢更改它们。这导致开发人员不得不编写复杂的配置文件编辑器,或更糟糕的是,它们会完全重新设计其原始api。
  • 多个配置源
    随着您软件的成熟,添加更多应用程序配置类型的情况并不少见(例如我之前给您的示例)。这通常是由于合并其他项目中的代码,新的改进格式以及迁移到不同的编程平台而引起的。这迫使程序员学习多个api。最终结果是代码不一致,也不适合新程序员。不会替换旧的配置文件,因为程序员及其经理不适应更改成熟的代码。编辑文件的用户可以抵制此更改,因为他们希望不学习新的文件格式。

1.3介绍nini

nini是一个功能强大的 .net配置 库,旨在帮助快速构建高度可配置的应用程序。nini提供了一种解决方案,试图消除上述问题。它提供了一个大型功能集,可为您提供从概念到成熟产品的每个阶段都将使用的功能。这是通过简单但灵活的api实现的,该api提供了对基础配置源的抽象。它解决了我上面描述的所有问题。我们将在下面的示例中看到如何完成此操作。

2.入门

2.1一个简单的例子

为了向您展示nini如何解决这些问题,让我们来看一个示例。首先,让我们看一个示例配置文件。对于本手册中的大多数示例,我将选择ini 格式。ini文件是一种久经考验的真实配置文件类型,用于诸如mysql,php和samba之类的著名开源项目 。实际上,nini支持多种ini文件类型。它们非常简单且易于编辑,因此仍然是非常受欢迎的选择。nini包含它自己的ini解析器类(),该类 完全用c#编写,没有 windows api代码,因此它是跨平台的。这是此示例的myapp.ini文本:

; myapp.ini
[logging]
file name = myapp.log
messagecolumns = 5
maxfilesize = 40000000000000

以下是一段c#示例代码,它描述了如何从上述文件中的ini文件访问配置数据:

using nini.config;
iconfigsource source = new iniconfigsource("myapp.ini");

string filename = source.configs["logging"].get("file name");
int columns = source.configs["logging"].getint("messagecolumns");
long filesize = source.configs["logging"].getlong("maxfilesize");

这是vb中的示例:

imports nini.config

dim source as new iniconfigsource("myapp.ini")

dim filename as string = source.configs("logging").get("file name")
dim columns as integer = source.configs("logging").getint("messagecolumns")
dim filesize as long = source.configs("logging").getlong("maxfilesize")

好的,那个例子给您带来了一些麻烦。首先,我们使用nini.config将nini的配置名称空间包含在虚构的应用程序中。接下来,我们使用 类加载ini文件。在nini中,每种配置文件类型都有其自己的“ source”类。此类知道如何加载和保存文件。这些类中的每一个都实现 接口,因此您可以更轻松地抽象地使用多种配置类型。加载文件后,所有部分(在本例中为[logging]部分)都将转换为接口。 并添加到source类的集合中。iconfig类提供了非常快速的访问权限,以检索,添加或删除配置密钥(例如上述ini文件中的“文件名”)。iconfig类的方法包括 , , , , 和 方法。所有以“ get”为前缀的方法都将重载以提供更多数据。接下来的几节描述了如何使用这些重载。

2.2默认值

有时,配置文件中不会出现选项。这可能是因为尚未将其添加到项目的主版本中,或者应将其对用户保密。对于这些情况,nini提供了重载的方法,这些方法允许程序员定义默认值。

这是c#中的示例:

// 将缺少默认值设置为 "default result".
string missing = config.get("missing config", "default result");

// 设置smallnumber为默认值,50
int smallnumber = config.getint("not present", 50);

这是vb中的相同示例:

' sets missing to the default value, "default result".
dim missing as string = config.get("missing config", "default result")

' sets smallnumber to the default value, 50.
dim smallnumber as integer = config.getint("not present", 50)

2.3设置、保存和删除键

也可以设置新值并将其保存到配置文件中。调用set方法将更改现有值,或者如果不存在则将其添加。这是一个例子:

config.set("file name", "mynewfile.log");
config.set("messagecolumns", 45);
config.remove("file name");
    
source.save();

但是,有必要调用save方法来保存文件,但是,您还可以在iconfigsource上设置autosave属性,并且每次调用set方法时,该属性都会自动保存文件。如果要将文档保存到其他路径或对象,则, 和 类都保存重载的save方法,这些方法使您可以保存到新路径或textwriter:

这是c#中的示例:

using system.io;
    
iniconfigsource source = new iniconfigsource("test.ini");
stringwriter writer = new stringwriter();
source.save(writer); // 保存到stringwriter(textwriter)

source.save("some/new/path.ini"); // 保存到新路径

这是vb中的示例:

imports system.io
    
dim source as iniconfigsource = new iniconfigsource("test.ini")
dim writer as new stringwriter()
source.save(writer) ' save to stringwriter(textwriter)

source.save("some/new/path.ini") ' save to new path

2.4添加和删除配置

在特定情况下,您将需要自己添加和删除iconfigs。nini具有完成这两项操作的简单方法。这是我创建新配置然后立即将其删除的示例。

这是c#中的示例:

iconfig newconfig = source.addconfig("newconfig");

source.configs.remove(newconfig);

这是vb中的示例:

dim newconfig as iconfig = source.addconfig("newconfig")
    
source.configs.remove(newconfig)

2.5键值扩展

在许多情况下,您会发现您的键值取决于其他键的值。例如,您有一个根路径配置值,以及使用此路径的文件的多个值,例如以下示例:

[file path]
rootpath = c:\program files\my program
logging = myapp.log
webpage = 

如果没有nini,则如果要将“ rootpath”的值与“ logging”和“ webpage”结合使用,则必须执行难看的字符串连接才能获得“ c: program files  my program  ”。在nini中,您不需要这样做:

[file path]
rootpath = c:\program files\my program
logging = ${rootpath}\myapp.log
webpage = ${rootpath}\

这可以为您自己串联它们省去很多麻烦,并使您的代码更整洁。如果要从其他部分获取值,则可以执行上述操作,但是要在部分名称后添加一个横条(“ |”),如下所示:$ {section | key}。当您准备执行替换时,请调用expandkeyvalues(注意:以前称为replacekeyvalues)

这是c#中的示例:

iconfigsource source = new iniconfigsource("myapp.ini");
source.expandkeyvalues();

这是vb中的示例:

dim source as new iconfigsource("myapp.ini")
source.expandkeyvalues()

调用expandkeyvalues时,它会一次更改配置文件中的所有键。这使代码执行更快,因为它不需要替换每个get / getstring / getint / etc调用上的键值。但是,这意味着如果要使用保存配置文件,它将用扩展值覆盖以前的值。如果您不希望发生这种情况,则可以使用getexpanded方法。

; 这会将日志记录设置为 "c:\program files\my program\myapp.log"
iconfigsource source = new iniconfigsource("myapp.ini");
string logging = source.configs["file path"].getexpanded("logging");

这就是创建第一个nini配置的应用程序很容易。以下各节将介绍nini的一些更高级的功能。

3.高级主题

3.1合并

合并是一项非常强大的功能,允许开发人员将来自多个源的配置数据组合到一个对象中。您可以将无数种不同的配置类型组合到一个iconfigsource中!您可以将多个ini,xml和注册表文件添加到同一对象中。你觉得很酷吗?这是一个如何将ini文件与xml文件合并的示例。

这是c#中的示例:

iconfigsource mainsource = new iniconfigsource("myapp.ini");
iconfigsource xmlsource = new xmlconfigsource("myapp.xml");
mainsource.merge(xmlsource);

// 现在,您可以从mainsource和xmlsource访问任何iconfig
string xmlvalue = mainsource.configs["somexmlsection"].get("anoption");

这是vb中的示例:

dim mainsource as new iniconfigsource("myapp.ini")
dim xmlsource as new xmlconfigsource("myapp.xml")
mainsource.merge(xmlsource)

' now you can access any iconfig from mainsource and xmlsource
dim xmlvalue as string = mainsource.configs("somexmlsection").get("anoption")

当数据在文件之间合并时,任何同名的iconfig或包含相同密钥的iconfig都将覆盖之前的文件。对于具有不同配置需求的客户端的用户来说,这非常重要。您可以在一个文件中创建默认配置设置,并具有特定于客户端的文件,如果需要,该文件将覆盖主文件的设置。这将节省您大量的工作。它对我有用。

3.2价值别名

许多配置文件的选项对于程序员来说是清楚的,但对非程序员来说却很混乱。为了使非程序员更容易理解配置文件,一种常见的做法是使键和值更像普通的人类对话框那样读取。让我们看一个示例,说明如何使用易于理解的字符串值返回布尔值。首先,让我们从aliasexample ini文件开始:

; aliasexample.ini
[web browser]
block popups = on
check for default browser = off
error level = warn

如您所见,我不是使用每个键的值都使用“ 1”或“ true”之类的值,而是使用了“ on”和“ off”,希望它们可以使用户更容易理解。您还将注意到,每个值之间的大小写不完全是大写或小写。我这样做是为了提出观点。用户很难记住要在特定键值中放置什么值,因此要使它们变得更容易一点也不 要使他们也记住要使用哪种情况!忽略大小写的问题是您的代码看起来很丑陋,如以下示例所示:

bool blockpopups = (config.get("block popups").tolower() == "on");

让我们为该文件定义一些规则,使它们成为规则。我们希望 blockpopups部分的 值在值设置为“ on”时返回布尔值true,而在值设置为“ off”时返回false值。此外,我希望错误级别将整数值设置为“ warn”时返回100,而将值设置为“ error”时返回200。下面的代码显示如何向iconfigsource的alias属性添加规则,该属性定义了我在上一段中刚刚定义的规则。

这是c#中的示例:

iconfigsource source = new iniconfigsource("aliasexample.ini");
    
// 创建两个布尔别名。
source.alias.addalias("on", true);
source.alias.addalias("off", false);

// 设置两个整数别名。
source.alias.addalias("error level", "warn",  100);
source.alias.addalias("error level", "error", 200);

iconfig config = source.configs["web browser"];
bool blockpopups = config.getboolean("blockpopups");
int errorcode = config.getint("error code", true);

这是vb中的示例:

dim source as new iniconfigsource("aliasexample.ini")
    
' creates two boolean aliases.
source.alias.addalias("on", true)
source.alias.addalias("off", false)

' sets two integer aliases.
source.alias.addalias("error level", "warn",  100)
source.alias.addalias("error level", "error", 200)

dim config as iconfig = source.configs("web browser")
dim blockpopups = config.getboolean("blockpopups")
int errorcode = config.getint("error code", true)

addalias的前两个调用 将布尔值添加到文本“ on”和“ off”。此方法的接下来的两个调用将别名文本添加到“错误级别”配置中,并将文本分别为“警告”和“错误”以及数字值100和200。接下来,我获取了关键数据。getint方法已重载,因此,如果参数设置为true,则它将以别名而不是文字整数值加载数据。

3.3键值清单

nini没有用于返回信息列表的专用方法。这是因为 .net framework 的string.split方法已经有了使用小技巧的 方法。这是一个ini文件,其中服务器列表由竖线(“ |”)分隔符分隔:

[mailservers]
serverlist = "http://mail.yahoo.com/|http://www.hotmail.com/|http://www.mail.com/"

现在,使用split方法,我们将服务器列表作为字符串数组返回:

string[] serverlist = source.configs["mailservers"].get("serverlist").split('|');

这是vb中的示例:

dim serverlist() as string = source.configs("mailservers").get("serverlist").split('|')

您可以使用split方法使用任意数量的分度器。要有创造力。只需选择一个不会用作键值的分度符即可。

3.4活动

nini允许开发人员以非连接方式执行操作,从而使事情变得容易。通常,第一个对象可以只使用iconfig,而不必担心其他对象如何使用它。但是,有时候知道更改配置数据的时间很有用。nini添加了许多事件来帮助处理这些情况。

在以下情况下,类需要在保存iconfigsource时通知。

这是一个c#示例:

void sourceload()
{
  source = new iniconfigsource();
  source.saved += new eventhandler(this.source_saved);
}

void source_saved(object sender, eventargs e)
{
  // 在这里执行保存操作
}

这是一个vb示例:

sub sourceload()
{
  source = new iniconfigsource()
  source.saved += new eventhandler(me.source_saved)
}

sub source_saved(sender as object, e as eventargs) handles source.saved
{
  ' perform save actions here
}

还有更多事件,例如load,keyset,keyremoved,configadded和configremoved。

4.配置类型

4.1 ini文件

nini具有使用100%c#编写的内置ini解析器。这意味着,与其他ini解析器不同,它将在任何.net平台上运行,而不仅仅是运行windows的平台。另外,解析器的编写旨在提高灵活性,这就是为什么它支持多种ini文件类型的原因。当前支持的文件类型如下:

  • windows style (win32 api getprivateprofilestring)
  • mysql style
  • python style
  • samba style
  • nini standard
    区分大小写
    iniconfigsource类具有一个允许值不区分大小写的属性。对于使用不区分大小写的旧win32 api getprivateprofilestring函数从系统升级软件的人们,这可能是理想的。这是一个如何使用它的示例:
; 注意,load方法只是将文件名传递给构造函数的替代方法。
iconfigsource source = new iniconfigsource();
source.load("myapp.ini");
source.casesensitive = false;

4.2 xml文件

nini拥有自己的xml配置文件结构。与.net配置文件格式相比,它提供了更大的灵活性。它的主要优点是您可以拥有多个xml配置文件,并且格式更加简洁。这是格式的示例。您会发现它非常类似于ini文件。配置值与先前示例中的ini相同:

<!-- myapp.xml -->
<nini>
    <section name="logging">
        <key name="file name" value="myapp.log" />
        <key name="messagecolumns" value="5" />
        <key name="maxfilesize" value="40000000000000" />
    </section>
</nini>

加载文件非常简单:

// 加载xml文件
xmlconfigsource source = new xmlconfigsource("myapp.xml");
// 检索值
long maxfilesize = source.configs["logging"].getlong("maxfilesize");

这是vb中的示例:

' loads the xml file
dim source as new xmlconfigsource("myapp.xml")
' retrieves a value
dim maxfilesize as long = source.configs("logging").getlong("maxfilesize")

4.3 windows注册表配置

如果您使用的是许多microsoft windows操作系统之一,则可以从windows注册表访问数据。这是注册表项的示例键路径:

hkey_local_machine\sofware\myapp\logging
"file name"       "myapp.log"  reg_sz
"messagecolumns"  "5"          reg_dword
"maxfilesize"     "40000000"   reg_dword

要访问此代码,该方法比其他方法要复杂一些。您必须创建到注册表项的映射。此功能还将使您能够将许多注册表项合并到一个iconfigsource中。这是一些访问它的示例代码。

这是c#中的示例:

using microsoft.win32;
registryconfigsource source = new registryconfigsource();
// 加载注册表树
source.addmapping(registry.localmachine, "software\\myapp\\logging");
// 检索值
long maxfilesize = source.configs["logging"].getlong("maxfilesize");

这是vb中的示例:

imports microsoft.win32
dim source as new registryconfigsource()
' loads the registry tree
source.addmapping(registry.localmachine, "software\\myapp\\logging")
' retrieves a value
dim maxfilesize as long = source.configs("logging").getlong("maxfilesize")

如果您想递归地检索指定注册表项下的所有数据,也可以使用一种方法来完成。

如果要使所有子键位于具有统一名称的键下,则可以执行以下操作:

using microsoft.win32;
// 加载注册表树及其下的所有节点
registryconfigsource source = new registryconfigsource();
source.addmapping(registry.localmachine, "software\\myapp", registryrecurse.flattened);

string maxfilesize = source.configs["myapp"].getstring("someconfig");
long maxfilesize = source.configs["logging"].getlong("maxfilesize");

这是vb中的示例:

imports microsoft.win32
' loads the registry tree and all nodes beneath it without 
dim source as new registryconfigsource()
source.addmapping(registry.localmachine, "software\\myapp", registryrecurse.flattened)

dim maxfilesize as string = source.configs("myapp").getstring("someconfig");
dim maxfilesize as long = source.configs("logging").getlong("maxfilesize")

4.4 .net配置文件

.net framework具有使用特定xml格式的自己的配置文件机制 。您可能在asp.net中以web.config 文件的形式熟悉它们。如果将它们与windows窗体,控制台应用程序或服务一起使用,则将它们称为[app name] .exe.config文件。为了支持仍在其应用程序中使用此配置文件格式的用户,nini也支持这些文件。

<!-- exampleapp.exe.config -->
<configuration>
    <configsections>
        <section name="logging" type="system.configuration.namevaluesectionhandler" />
    </configsections>
    <logging>
        <add key="file name" value="myapp.log" />
        <add key="messagecolumns" value="5" />
        <add key="maxfilesize" value="40000000000000" />
    </logging>
</configuration>

访问数据与加载ini或xml文件非常相似:

iconfigsource source = new dotnetconfigsource(dotnetconfigsource.getfullconfigpath());

string filename = source.configs["logging"].get("file name");
int columns = source.configs["logging"].getint("messagecolumns");
long filesize = source.configs["logging"].getlong("maxfilesize");

这是vb中的示例:

dim source as new dotnetconfigsource(dotnetconfigsource.getfullconfigpath())

dim filename as string = source.configs("logging").get("file name")
dim columns as integer = source.configs("logging").getint("messagecolumns")
dim filesize as long = source.configs("logging").getlong("maxfilesize")

4.5命令行(argv)配置

自从编程开始以来,应用程序就具有接受命令行开关的能力。这些开关只是在应用程序首次启动时传递给应用程序的字符串。windows程序xcopy具有许多命令行 开关 ,而出色的下载应用程序wget也具有其自己的 。如果您想更多地了解.net中命令行参数的工作方式, 请单击此处(链接无效)。我们的第一个示例与您迄今为止看到的其他示例非常相似。区别在于 addswitch 需要为每个键配置调用方法。有一个短键和一个长键可用于获取配置数据。

这是c#中的示例:

public static int main(string[] args)
{
   argvconfigsource source = new argvconfigsource(args);

   source.addswitch("logging", "file-name", "f");
   source.addswitch("logging", "columns", "c");
   source.addswitch("logging", "max-file-size", "m");

   if(args.length > 0)
   {
      string filename = source.configs["logging"].get("file-name");
      int columns = source.configs["logging"].getint("columns");
      long filesize = source.configs["logging"].getlong("max-file-size");
   }
}

这是vb中的示例:

public static function main(args() as string) as integer
   dim source as new argvconfigsource(args)

   source.addswitch("logging", "file-name", "f")
   source.addswitch("logging", "columns", "c")
   source.addswitch("logging", "max-file-size", "m")

   if (args.length > 0) then
      dim filename as string = source.configs("logging").get("file-name")
      dim columns as integer = source.configs("logging").getint("columns")
      dim filesize as long = source.configs("logging").getlong("max-file-size")
   end if
end function

5.有效使用nini

5.1多个用户的处理配置

您可能会注意到,.net 1.0和1.1的configurationsettings类仅提供检索配置值的方法。这是因为对于程序员来说,以编程方式更改整个应用程序的配置值通常是一个坏主意。全局配置应用程序的方式由管理员决定。因此,我建议您不要更改应用程序级别设置。

但是,至关重要的是,您必须允许用户根据自己的个人喜好配置应用程序。nini允许您创建许多不同的配置文件源,因此只需将配置文件放在正确的目录中即可。windows程序的标准是应用程序数据目录:

c:\documents and settings[username]\local settings\application data[application name]\settings.ini

您可以通过以下路径以编程方式获取此路径:

string folder = environment.getfolderpath(environment.specialfolder.applicationdata);

5.2在数据库中存储配置数据

如果您正在运行asp.net应用程序,则每个系统中可能会有多个用户。您可能还需要编辑许多用户设置。大多数web应用程序都完全配置有数据库,因此以下是将nini与数据库一起使用的示例。

这是一个带有sql server表的非常简单的示例。这可以很容易地适应任何其他数据库。这是数据库表的结构:

create table usersettings
(
   userid id,
   settings text
);

configsettings字段存储nini配置值。现在,您可以像这样加载nini配置值:

string userid = getuserid(); // retrieve the user id somehow

sqlcommand command = new sqlcommand("select settings from usersettings where id = "
                                     + userid, connection);

connection.open();

sqldatareader reader = command.executereader();

if(reader.hasrows) {
    reader.read();
    iconfigsource source = new xmlconfigsource(new stringreader(reader.getstring(0)));
}

reader.close();
connection.close();

5.3自动创建配置文件

对于任何开发项目而言,能够自动创建构建都是必不可少的。有几种工具可以完成此任务,例如批处理(.bat)脚本,但是.net framework最受欢迎的选择可能是 nant。您可能会发现自己需要使用构建管理系统来创建配置文件。为了使这些工作更轻松,nini项目提供了niniedit(nini命令行配置编辑器)。使用此应用程序,您可以创建和编辑任何基于文件的配置数据。ninieditor包含在examples目录中的每个nini版本中。

让我们添加一个示例,说明如何在构建中使用niniedit。在第一个示例中,假设您的构建是一个批处理文件,并且您需要以编程方式创建以下ini文件:

[general]
debug = false
logging = on
[logging]
filepath = c:\temp\myapp.log

以下调用将自动创建配置文件:

:: create the new configuration file
niniedit --new --set-type=ini myapp.ini
niniedit --add=general myapp.ini
niniedit --add=logging myapp.ini
niniedit --config=general --set-key=debug,false myapp.ini
niniedit --config=general --set-key=logging,on myapp.ini
niniedit --config=logging --set-key=filepath,c:\temp\myapp.log myapp.ini

如果您在nant中执行相同的操作,则可以执行以下操作:

<exec program="niniedit" commandline="-n -s ini myapp.ini" />
<exec program="niniedit" commandline="-a general myapp.ini" />
<exec program="niniedit" commandline="-a logging myapp.ini" />
<exec program="niniedit" commandline="-c general -k debug,false myapp.ini" />
<exec program="niniedit" commandline="-c general -k logging,on myapp.ini" />
<exec program="niniedit" commandline="-c logging -k filepath,c:\temp\myapp.log myapp.ini" />

这里的所有都是它的。niniedit具有其他功能,例如列出配置,键,键值和删除键的功能。如果没有其他问题,请以niniedit为例,说明如何使用nini编写自己的命令行应用程序。

5.4以编程方式创建配置文件

有时,使用应用程序以编程方式创建配置文件可能会很有用。使用nini进行此操作非常容易。

假设您要创建在任一示例中创建的相同ini文件:

[general]
debug = false
logging = on
[logging]
filepath = c:\temp\myapp.log

在代码中创建代码的方法如下:

iniconfigsource source = new iniconfigsource();

iconfig config = source.addconfig("general");
config.set("debug", "false");
config.set("logging", "on");

config = source.addconfig("logging");
config.set("filepath", "c:\\temp\\myapp.log");

source.save("myapp.ini");

5.5为您的应用程序选择正确的配置文件类型

nini的编写旨在使所有配置文件类型都成为一流公民。这是因为每种配置文件类型都有其自身的优点和缺点。下面的列表包含一些基本准则:

ini

  • 速度-文件类型的解析速度非常快,因此它的加载和保存速度可能比其他类型更快。
  • 可读性-在配置类型中,这可能对用户最不可怕。如果您要让用户手动更改此配置文件,那么我强烈建议您使用此格式。
  • 安装程序-ini文件受许多类型的安装程序支持(wise,nsis,仅举几例)。如果您需要构建来编辑这些文件,那么绝对可以这样做。

xml

  • 速度-xml解析器要加载很多信息,因此这可能是最慢的。
  • 可读性-这种格式对于初学者来说有点吓人。
  • 支持-所有编程语言都支持此功能,因此,如果其他应用程序正在访问数据,那么这是一个很好的类型。
  • 安装程序-由于配置文件没有标准的xml格式,因此安装程序通常不支持此格式。

.net配置文件

  • 速度-xml解析器要加载很多信息,因此这可能是最慢的。
  • 可读性-这种格式对于初学者来说有点吓人。
  • 安装程序-.net framework将这些配置文件用于其他配置。如果将.net配置和您自己的应用程序配置选项混合使用,我建议不要使用它。

windows注册表

  • 速度-快速检索配置数据。随着注册表越来越多地填充数据,检索速度的确会变慢。这被认为是定期重新安装windows可以使计算机运行更快的原因之一。
  • 可读性-如果您确实不希望用户能够配置应用程序,则应使用此类型。触摸注册表可能会导致严重问题,因此建议除非必要,否则不要使用它。但是,请注意,如果您的支持人员需要用户调整配置设置,他们将遇到与用户相同的问题。除此之外,配置文件编辑器是众所周知的并且很成熟。
  • 安装程序-大多数安装程序支持读取和编辑注册表项,因此这是一个不错的选择。
    没有完美的配置类型,因为每个配置都有自己的优势。如果最终选择的配置文件类型不适合您的情况,则不要惊慌。nini提取了您要访问的文件类型,因此您必须更改的代码量应该最少。

本教程就是这样。希望对您有所帮助!如果您有任何关于改进本手册的问题或建议,请访问nini主页,并使用论坛,错误跟踪器或功能请求工具来表达自己的意见。

附件:获取nini

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网