INI 文件映射到注册表时在功能上有何不同?

What are the differences in functionality when INI files are mapped to the Registry?

我有一个使用 INI 文件的应用程序,当我将 INI 文件作为 described at WritePrivateProfileString [MSDN] 映射到注册表时,行为似乎并不相同,尽管文档说

the change in the storage location has no effect on the function's behavior.

磁盘上的 INI 文件和映射到注册表的 INI 文件有什么区别?

有几点不同:

  • 注册表是 Unicode,而大多数 INI 文件可能是 ANSI(只要它们没有 UTF16-LE header)。
  • GetPrivateProfileString() 在 65536 字节处溢出。这意味着您可以从 ANSI 文件中读取 65535 个字符,但只能从注册表中读取 32767 个字符。
  • 注册表值可以包含换行符,而 INI 文件中的新行开始一个新键(基本上终止该值)。
  • 从 INI 文件读取值时会忽略前导和尾随空格(空格、制表符和垂直制表符),但会在从注册表中读取时返回。
  • 写入以分号开头的密钥将在使用文件时将其变成注释。在注册表中,它将被视为真正的密钥。

请注意,此列表可能不完整,并且会随 Microsoft 的新实现而变化。这些测试是在 Windows 10 21H1 进行的。

所有这些应该足以说服人们从 INI 文件切换到其他配置文件格式。此 API 是 16 位 Windows 的遗留物,不应再使用。您的配置文件不必是 XML,也许 JSON 或 YAML 就足够了。