标准Windows .ini文件是否允许注释?


91

Windows ini文件中允许注释吗?(...假设您正在使用GetPrivateProfileString api函数读取它们...)

[Section]
Name=Value   ; comment

; full line comment

并且,任何地方都有.INI文件格式的正确规范吗?

感谢您的答复-但是,也许我不够清楚。这只是我感兴趣的Windows API调用读取的格式。我知道其他实现允许注释,但是我需要了解的具体是MS Windows规范和实现。


1
该API返回值和注释,您只需要查找分号并使用正则表达式读取或在遇到此类情况时将其删除即可,或者只查找;即可。
RoguePlanetoid

7
@RoguePlanetoid一个正则表达式,找到一个;字符?认真!!
IInspectable 2013年

1
@IInspectable只能使用正则表达式来读取注释,因此请在分号之后提取元素,或者按照我在注释中提到的内容或查找;。提供一种选择来提取评论本身或寻找一个评论的存在,我认为我的评论具有增值作用,只是看看分号是否存在不完整的评论
RoguePlanetoid

Answers:


95

Windows INI API支持:

  • 行注释:是,使用分号;
  • 尾随评论:

权威来源是Windows API函数,该函数从INI文件中读取值

GetPrivateProfileString

从初始化文件中指定部分中检索字符串。

“全行注释”工作的原因是因为请求的值不存在。例如,当分析以下ini文件内容时:

[Application]
UseLiveData=1
;coke=zero
pepsi=diet   ;gag
#stackoverflow=splotchy

读取值:

  • UseLiveData1
  • coke不存在
  • ;coke不存在
  • pepsidiet ;gag
  • stackoverflow不存在
  • #stackoverflowsplotchy

更新:我以前认为数字符号(#)是伪的行注释字符。使用前导#可以隐藏的原因stackoverflow是该名称stackoverflow不再存在。事实证明,分号(;行注释。

但是不支持尾随注释。


3
很有帮助的示例,但是我很难理解这样的措辞:“全行注释之所以起作用是因为所请求的值不存在”。我要澄清地说,Windows INI实现在键/值对(如果存在)之前需要分号,否则它将被视为值的一部分。
GravityWell,2014年

@罗迪你是对的。我太专心使用了#,没注意到;。修正了答案,指出分号确实是一行注释。
伊恩·博伊德

29

我在INI文件中看到了注释,所以可以。请参阅此Wikipedia文章。我找不到正式的规范,但这是注释的正确语法,因为我记得很多游戏INI文件都具有此语法。

编辑

该API返回值和注释(在我的答复中忘记提及此内容),只需构造并举例说明INI文件,然后在此文件上调用API(带有注释),就可以看到它是如何返回的。


1
使用来源时,使用最权威的来源然后再使用任何支持来源更有意义。
Mike Collins

1
当然,这是一个好主意-即使经过七年的-那将永远不会太晚点
RoguePlanetoid

8

在行的开头使用半冒号--- >>; <<-

例如

; last modified 1 April 2001 by John Doe
[owner]
name=John Doe
organization=Acme Widgets Inc.

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.