我想保存我的项目的配置,其中包括
- 屏幕尺寸
- 屏幕位置
- 资料夹路径
- 用户设置等。
可以保存这些标准值的标准位置是:
- 登记处
- INI文件
- 个人文件(例如* .cfg)
您如何在这些地方之间进行选择?此外,使用它们中的任何方法是否有优点和缺点?
我想保存我的项目的配置,其中包括
可以保存这些标准值的标准位置是:
您如何在这些地方之间进行选择?此外,使用它们中的任何方法是否有优点和缺点?
Answers:
还有使用它们的利弊吗?
注册表:
+
Windows环境中的相对标准。+
通常安装程序等会提供良好的支持-
平台特定的API(如果您想移植应用程序)。-
并非特别易读。INI文件:
+
简单格式。+
随身携带。+
人类可读。-
可能难以存储更复杂的信息(例如,嵌套超过两层的任何东西)。?
可能必须编写自己的解析器(尽管并不困难)或使用诸如SimpleIni的外部库(感谢乔纳森· 梅尔特(Jonathan Merlet)的评论)。XML文件(我猜这是.cfg选项):
+
标准格式。+
随身携带。+
支持深度嵌套的结构。-
并非特别易读。就个人而言,对于Windows应用程序,我倾向于使用C#,并为用户提供一个以XML存储的个人文件。我之所以这样做,是因为在我编写的应用程序类型中,人的可读性通常不是优先考虑的事情(无论如何,该应用程序都应具有配置编辑器),并且在.NET环境中,使用XML非常容易。我经常最终得到一个UserConfiguration对象,该对象仅在配置文件中进行序列化处理-几乎不涉及开发(解析,转换内容),并且您已准备好在强类型环境中使用配置。
我会使用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文件?
<window width="600" height="350" />
我的首选是XML文件。它们是分层的,您可以按照几乎任何可以想象的方式弯曲它们,它们被很好地理解,独立于平台,并且可以使用各种各样的软件来读写它们。
为了扩展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)。
我个人的喜好是XML文件:
在大多数情况下,我不希望用户必须编辑其配置设置,因此在这种情况下,人类可读性不是问题。
如果确实需要编辑它们,则可以提供编辑工具-这样可以防止用户对数据进行愚蠢的操作。如果他们想恢复默认设置,您可以告诉他们删除文件x,这会使大多数用户感到满意。
请注意,您仍然需要谨慎,因为在Windows 7等默认情况下,某些位置没有写访问权限,因此您有权存储文件。
INI文件是存储配置的一种很好的标准方法,并且已经过尝试和测试,但是对我来说它们只是有点“ Windows 3.1”!
如果您希望用户能够修改其数据,则可能是最佳选择
我个人会避开注册表。一方面,您不能保证用户具有必要的权限,可以在您想要存储数据的任何地方进行读写。
在最近使用注册表虚拟化的操作系统中,这可能会引起很大的混乱,因为您无法“看到”虚拟化的设置-在花费数小时试图弄清为什么某些功能无法正常工作的情况下,这不止一次咬住了我们。