INI文件还是注册表或个人文件?


19

我想保存我的项目的配置,其中包括

  1. 屏幕尺寸
  2. 屏幕位置
  3. 资料夹路径
  4. 用户设置等。

可以保存这些标准值的标准位置是:

  1. 登记处
  2. INI文件
  3. 个人文件(例如* .cfg)

您如何在这些地方之间进行选择?此外,使用它们中的任何方法是否有优点和缺点


2
您正在使用哪些工具?某些技术带有不错的配置管理工具。

@ Pierre303当前将VS 2008用于VC ++
Shirish11 '13

用户是否需要进行更改?
JeffO 2012年

1
您是否考虑过YAML,但同时也兼顾了ini和xml的优点en.wikipedia.org/wiki/YAML
JF Dion

Answers:


20

还有使用它们的利弊吗?

注册表:

  • + Windows环境中的相对标准。
  • + 通常安装程序等会提供良好的支持
  • - 平台特定的API(如果您想移植应用程序)。
  • - 并非特别易读。

INI文件:

  • + 简单格式。
  • + 随身携带。
  • + 人类可读。
  • - 可能难以存储更复杂的信息(例如,嵌套超过两层的任何东西)。
  • ?可能必须编写自己的解析器(尽管并不困难)或使用诸如SimpleIni的外部库(感谢乔纳森· 梅尔特(Jonathan Merlet)的评论)。

XML文件(我猜这是.cfg选项):

  • + 标准格式。
  • + 随身携带。
  • + 支持深度嵌套的结构。
  • - 并非特别易读。

就个人而言,对于Windows应用程序,我倾向于使用C#,并为用户提供一个以XML存储的个人文件。我之所以这样做,是因为在我编写的应用程序类型中,人的可读性通常不是优先考虑的事情(无论如何,该应用程序都应具有配置编辑器),并且在.NET环境中,使用XML非常容易。我经常最终得到一个UserConfiguration对象,该对象仅在配置文件中进行序列化处理-几乎不涉及开发(解析,转换内容),并且您已准备好在强类型环境中使用配置。


不久前,我使用SimpleIni解析INI文件,并且运行良好。
乔纳森·梅勒

@JonathanMerlet谢谢,我已将SimpleIni添加到帖子中。
丹尼尔·B

15

我会使用INI文件,它们是更人性化的选择:

[window]
width       = 600
height      = 350
position.x  = 400
position.y  = 200

[paths]
path1       = "/some/random/path/"
path2       = "/some/other/random/path/"

[user]
name        = "Yannis"
preference  = "INI"

XML可能是一个不错的选择,但是它不能超越INI的简单性和优雅性:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <window>
        <width>600</width>
        <height>350</height>
        <position>
            <x>400</x>
            <y>200</y>
        </position>
    </window>
    <paths>
        <path1>/some/random/path/</path1>
        <path2>/some/other/random/path/</path1>
    </paths>
    <user>
        <name>Robert</name>
        <preference>XML</preference>
    </user>
</configuration>

INI也很容易理解,并且与平台无关。可用的工具可能不如XML文件可用,因为谁需要一个专门的工具来读取和编辑INI文件?


2
有趣,但是我发现XML看起来更漂亮并且更易于阅读。对于那些不喜欢冗长的人,JSON是一个合适的选择。
罗伯特·哈维

3
@RobertHarvey我喜欢JSON(如果需要更深层的嵌套,可以使用JSON),但是XML确实不是我的
理想之选

2
通过将值滚动到属性中可以使XML更好。例如,<window width="600" height="350" />
罗伯特·哈维

实际上,我很惊讶没有人提到YAML。我觉得这比JSON更人性化,但是功能和语法却非常相似。yaml.org网站可能会使所有不熟悉它的人吓跑。
丹尼尔·B

@DanielB有人提到过YAML ;)
yannis 2012年

6

我的首选是XML文件。它们是分层的,您可以按照几乎任何可以想象的方式弯曲它们,它们被很好地理解,独立于平台,并且可以使用各种各样的软件来读写它们。


6
但是非常冗长,并且毕竟毕竟不是人类可读的(不要将名称空间声明和其他bs缩进或膨胀到最大)。
Manjabes 2012年

1
@Manjabes:对于配置文件来说不太重要的特征。
罗伯特·哈维

@robert harvey:我住的地方非常重要。对于使用gui的基本设置,对于高级设置,请编辑ini。
Pieter B

6

为了扩展Jeff D对YAML的建议,这里有一个简短的介绍。

YAML与JSON类似(实际上,自YAML标准1.2版以来,JSON是YAML的子集,因此可以由YAML解析器解析有效的JSON)。乍一看,主要区别在于YAML(默认情况下)使用缩进而非括号来显示层次结构。还明显缺少字符串的引号。上面的一个简单示例:

configuration:
  window: 
    width:       600
    height:      350
    position:
      x:         400
      y:         200
  paths:
    path1:       some/random/path
    path2:       some/other/random/path
  user:
    name:        Joe Soap
    preference:  YAML

有关更好的示例,请参见Wikipedia的YAML页面。大多数主要语言都支持YAML(有关详细信息,请参见yaml.org)。


3

您忘记了一个选项:数据库。这主要用于以下情况中:当您的应用程序无法依赖已登录的Windows用户时,让用户登录到您的应用程序。例如,当您的应用程序在信息亭模式的Windows中运行时。


您可能需要一个INI文件或注册表项来保存与数据库的连接详细信息/字符串
类骨架

@CamelCase Inifile或注册表项已在问题中提及,但未提及数据库。我并不是要说您不能同时使用多种方法。
Pieter B

1

我个人的喜好是XML文件:

在大多数情况下,我不希望用户必须编辑其配置设置,因此在这种情况下,人类可读性不是问题。

如果确实需要编辑它们,则可以提供编辑工具-这样可以防止用户对数据进行愚蠢的操作。如果他们想恢复默认设置,您可以告诉他们删除文件x,这会使大多数用户感到满意。

请注意,您仍然需要谨慎,因为在Windows 7等默认情况下,某些位置没有写访问权限,因此您有权存储文件。


INI文件是存储配置的一种很好的标准方法,并且已经过尝试和测试,但是对我来说它们只是有点“ Windows 3.1”!

如果您希望用户能够修改其数据,则可能是最佳选择


我个人会避开注册表。一方面,您不能保证用户具有必要的权限,可以在您想要存储数据的任何地方进行读写。

在最近使用注册表虚拟化的操作系统中,这可能会引起很大的混乱,因为您无法“看到”虚拟化的设置-在花费数小时试图弄清为什么某些功能无法正常工作的情况下,这不止一次咬住了我们。


3
如果您担心注册表位置的权限,则可能要尝试将它们存储在错误的位置。用户应该具有HKey_Current_User配置单元的权限,这是每个用户设置的位置!
尼尔·怀特

@NeilWhite-同意他们应该具有权限,但是过度热心的IT管理员可以更改此权限(或提供读/写但不创建权限)。另外,OP并未提及这些设置必然是针对每个用户的,它们可能是针对每台机器的。
马特·威尔科

另外,注册表可以有大小限制。文件没有。
linquize
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.