【问题标题】:How can I read an ini file in C++? [duplicate]如何在 C++ 中读取 ini 文件? [复制]
【发布时间】:2012-02-01 21:21:02
【问题描述】:

可能重复:
What is the easiest way to parse an INI File in C++?

如何在 C++ 中读取 .ini 文件中的部分、键和值?

您能帮我提供非常简单的代码来读取简单文件吗?

例如:

[部分] key1=int_value1 键2=字符串值2

【问题讨论】:

  • 您为实现这一目标付出了哪些努力?
  • 亲爱的保罗,在我提出这样的问题之前我几乎没有尝试过,我尝试使用 (GetPrivateProfileInt) 但它对我不起作用。我只是 C++ 的初级,错误是 (GetPrivateProfileInt identifier not found
  • 我没有看到任何反对意见。
  • 我知道为时已晚,但从上面 OP 的评论来看,我认为他的问题不包括“Windows.h”或链接正确的库。使用#include 和#pragma comment(lib, 'kernel32.lib')

标签: c++ visual-c++ ini


【解决方案1】:

【讨论】:

  • 我没有看到明确提到 windows 作为正在使用的平台?不过,作为在 Windows 上存储配置的替代品的好建议。
【解决方案2】:

https://github.com/brofield/simpleini是我用来读取ini文件的,它是一个简单的模板类,易于使用和集成,另外它是跨平台的。

【讨论】:

    【解决方案3】:

    对于初学者,INI 文件已过时,应尽可能避免使用。由于简单的格式(也许是正确的),它们看起来很诱人,但它们是有限的,并且用于访问它们的 API 已被弃用和/或很弱。如果可以,使用简单的 XML 配置文件可能会更好(尽管它可能还需要外部代码,而且许多 XML 解析器又胖又丑;pugixml 是我的最爱)。

    如果您必须使用 INI,则需要 GetPrivateProfile* 函数,如列出的 here(我假设您的目标是 Windows 并且可以使用 WinAPI 函数,因为您在 VS 上)。

    函数的精确行为实际上有些复杂,但在大多数情况下,它们会按您预期的方式工作,即使有些笨拙。您可以查询文件中的节、整数和字符串,如下所示:

    UINT value = GetPrivateProfileInt("Section", "Key", DEFAULT_VALUE, "program.ini");
    

    等等。一个潜在的混淆点是节的参数名称 (lpAppName),当使用单应用程序/多节 INI 时,它是不准确的。

    但是请注意,INI 函数很慢。他们经常加载并通读整个文件以寻找他们需要的部分,并且连续调用将重新打开并重新读取大部分文件。它们是旧的并且没有优化,所以你应该减少调用。如果你需要速度,缓存值,一次性读取它们,或者使用一些可以(比如 XML)。

    【讨论】:

    • 告诉某人避免使用某些东西,因为它“旧”几乎从来都不是好建议。如果这真的是不使用它的最佳理由,那么使用它就没有错(而且我不知道您所说的 API 是什么意思,因为它们“弱”)。
    • 回应@Fred - 在windows 上,不鼓励和贬低内置win32 ini 读/写功能,因为注册表取代了它们的Windows 95。在其他平台上,或者在具有第三方库的 Windows 上,将它们用作易于用户编辑的配置文件当然仍然是一个不错的主意,其中您所需要的只是键值存储,而 json 或 xml 只是矫枉过正。没有人喜欢手动编辑 XML。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多