C++ 如何读取C++;?

C++ 如何读取C++;?,c++,visual-c++,ini,C++,Visual C++,Ini,可能重复: 如何从C++中的INI文件中读取节、键和值? 你能帮我提供非常简单的代码来阅读这个简单的文件吗 例如: [部分] 键1=int_值1 键2=字符串_值2 是我用来读取ini文件的,它是一个简单的模板类,易于使用和集成,另外,它是跨平台的。对于初学者来说,ini文件已经过时,应该尽量避免使用。它们看起来很诱人,因为其格式很简单(也许是正确的),但它们受到限制,用于访问它们的API不受欢迎和/或很弱。如果可以,使用一个简单的XML配置文件可能会更好(尽管它可能还需要外部代码,而且许多X

可能重复:

如何从C++中的INI文件中读取节、键和值? 你能帮我提供非常简单的代码来阅读这个简单的文件吗

例如:

[部分] 键1=int_值1 键2=字符串_值2
是我用来读取ini文件的,它是一个简单的模板类,易于使用和集成,另外,它是跨平台的。

对于初学者来说,ini文件已经过时,应该尽量避免使用。它们看起来很诱人,因为其格式很简单(也许是正确的),但它们受到限制,用于访问它们的API不受欢迎和/或很弱。如果可以,使用一个简单的XML配置文件可能会更好(尽管它可能还需要外部代码,而且许多XML解析器又胖又丑;pugixml是我的最爱)

如果您确实需要使用INI,则需要所列的
GetPrivateProfile*
函数(我假设您的目标是Windows,并且可以使用WinAPI函数,因为您使用的是VS)

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

UINT value = GetPrivateProfileInt("Section", "Key", DEFAULT_VALUE, "program.ini");
等等。一个潜在的混淆点是节的参数名(
lpAppName
),在使用单个应用程序/多节INI时,该名称不准确


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

查看GetPrivateProfileString和WritePrivateProfileString API:


< P> < /P>你为实现它做了什么努力?可能的复制品:亲爱的保罗,我几乎不在尝试提出这样的问题之前尝试使用(获取私有PrimeLeIt),但它对我没有用。我只是C++中的错误而已。(GetPrivateProfileInt标识符未找到我看不到任何反对投票的理由。我知道这太晚了,但从OP上面的评论来看,我认为他的问题在于没有包括“Windows.h”或链接正确的库。使用#include和#pragma comment(lib,'kernel32.lib'))告诉某人不要使用“旧”的东西几乎从来都不是好的建议。如果这真的是不使用它的最好理由,那么使用它也没什么错(我不知道你所说的API对他们来说是“弱”的意思)。作为对windows上的@Fred-的响应,内置win32 ini读/写功能不被鼓励和贬低,因为注册表位于windows 95。在其他平台上,或在具有第三方库的windows上,当然仍然可以将其用作用户可编辑的配置文件,其中您只需要键值存储,json或xml就太过分了。没有人喜欢手工编辑xml。我没有看到明确提到windows是正在使用的平台?不过,作为在windows上存储配置的替代品,这是一个很好的建议。
UINT value = GetPrivateProfileInt("Section", "Key", DEFAULT_VALUE, "program.ini");