【发布时间】:2014-01-29 12:13:20
【问题描述】:
Delphi 的 RTL 有一个诱人的功能:TCustomIniFile.ReadSubSections
但这似乎并没有在任何地方得到正确解释。
- 如何编写小节?
- 小节实际上是如何出现在 INI 文件中的?
- 而且,一旦您调用了
ReadSubSections,您如何使用结果来读取特定小节的数据?
【问题讨论】:
-
我认为它只在TMemIniFile docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/…中实现,所以你可以尝试使用它,然后在记事本中读取ini文件以检查格式。但由于它是 TMemIniFile-only 和非标准的,我会避免使用它。如果您确实需要使用超过两层的存储结构 - 只需使用 JSON SuperObject
-
@Arioch'除了在该页面中编写小节之外,我没有看到任何内容?我是不是错过了什么……
-
好吧,不仅如此。它也在注册表中实现。这可能就是它的来源。 docwiki.embarcadero.com/Libraries/XE2/en/… 所以您可以尝试从 TRegistryIniFile 读取到临时字符串列表,然后从 SL 读取到 TMEmIniFile,然后将其保存到 ini 文件并在记事本中读取。我认为目的是在 Read*** 和 Write*** 方法中使用 SubSections 名称而不是 Sections 名称。我盲目地猜测它们会用反斜杠编写,就像 regedit 的带有 *.reg 扩展名的 ini 文件一样。但你确实尝试
-
再次,我认为通过一些信誉良好的库使用标准 JSON 更有意义,而不是对 ini 文件使用非标准的非文档扩展(dbExpress 不是)
-
对于 INI 和 JSON,唯一可靠的方法是持久化 cmets 以包含它们,因为某些键的名称具有特殊约定。或者只使用只读访问。 Windows (TIniFile) 和 Delphi (TMemInifile) 实现都不提供关于非数据的保证,并且如果他们愿意,可能会覆盖文件(并且 TMemIniFile 确实会这样做)。因此,如果您需要 cmets 要么坚持使用 XML,要么制定专门的注释值