如何在C++中读取ini文件?

4

2
你为实现它付出了什么努力? - Tae-Sung Shin
可能重复:https://dev59.com/enVD5IYBdhLWcg3wVKEb - Fred Larson
亲爱的保罗,我在问这样的问题之前已经努力尝试了。我尝试使用(GetPrivateProfileInt),但它对我没有起作用。我只是C++的初学者,错误是(GetPrivateProfileInt标识符未找到)。 - Khadijah J Shtayat
我不认为点踩有任何意义。 - CDT
我知道现在已经太晚了,但从楼主上面的评论中,我认为他的问题是没有包含“Windows.h”或链接正确的库。请使用 #include<windows.h> 和 #pragma comment(lib, 'kernel32.lib')。 - Abhineet
3个回答

6

6

我没有看到明确提到使用Windows作为平台?不过,将配置存储在Windows上的替代建议很好。 - braindigitalis

-6

首先,INI 文件已经过时了,应尽可能避免使用。它们因其简单的格式而显得有吸引力(也许理所当然),但是存在很多限制,用于访问它们的 API 已经被弃用或者不够强大。如果可以的话,使用一个简单的 XML 配置文件可能会更好(虽然这也可能需要外部代码,并且许多 XML 解析器非常笨重和难看;pugixml 是我最喜欢的解析器)。

如果您确实必须使用 INI 文件,则需要使用列在 这里GetPrivateProfile* 函数(假设您正在针对 Windows 平台编程并且可以使用 WinAPI 函数,因为您在使用 VS)。

实际上,这些函数的精确行为有些复杂,但在大多数情况下,它们会按照您的期望工作,尽管有些笨拙。您可以查询一个文件的章节、整数和字符串,如下所示:

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

等等。一个可能会引起混淆的地方是节的参数名称(lpAppName),当使用单应用程序/多节INI时不准确。

然而,请注意,INI函数速度较慢。它们经常加载并读取整个文件以查找所需部分,并且连续调用将重新打开和重新读取文件的大部分内容。它们已经过时且未经优化,因此您应该尽量减少调用次数。如果需要速度,请缓存值,在单个操作中读取它们,或使用可以实现这一点的其他方法(如XML)。


12
告诉别人不要使用某样东西,只因它“老旧”,几乎从来不是好建议。如果这是不使用它的最佳理由,那么使用它并没有错(我不知道你所说的API对它们来说为什么会“脆弱”)。 - Fred
1
针对@Fred的回复 - 在Windows上,内置的Win32 ini读写函数已经被弃用和不推荐使用,自从Windows 95以来,注册表已经取代了它们。在其他平台上,或者在Windows上使用第三方库时,当你只需要键值存储的易于用户编辑的配置文件时,仍然可以使用它们,而JSON或XML则会过于繁琐。没有人喜欢手动编辑XML。 - braindigitalis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接