::GetPrivateProfileString读取INI文件的整个部分 < >我正在修改现有的C++应用程序,并取出当前硬编码的一些值。

::GetPrivateProfileString读取INI文件的整个部分 < >我正在修改现有的C++应用程序,并取出当前硬编码的一些值。,c++,windows,winapi,configuration-files,ini,C++,Windows,Winapi,Configuration Files,Ini,我用一个类来完成这个任务,这个类将“管理”整个事情,并保存INI文件中的值的map 现在我必须使用::GetPrivateProfileString函数分别读取每个值-我是否可以读取整个部分而不是单个值 不必手动读取文件,但如果有任何合理(即高效+简单使用)的现有方式,我愿意听取建议 编辑:刚才必须“真实地”使用它,并且解决方案确实将NULL作为lpKeyName值传递。完整代码,包括分析返回值: char buffer[MAX_STRING_SIZE]; int charsCount = ::

我用一个类来完成这个任务,这个类将“管理”整个事情,并保存INI文件中的值的
map

现在我必须使用
::GetPrivateProfileString
函数分别读取每个值-我是否可以读取整个部分而不是单个值

不必手动读取文件,但如果有任何合理(即高效+简单使用)的现有方式,我愿意听取建议

编辑:刚才必须“真实地”使用它,并且解决方案确实将NULL作为lpKeyName值传递。完整代码,包括分析返回值:

char buffer[MAX_STRING_SIZE];
int charsCount = ::GetPrivateProfileString("MySection", NULL, NULL, buffer, MAX_STRING_SIZE, m_strIniPath);
CString curValue;
curValue.Empty();
char curChar = '\0';
for (int i = 0; i < charsCount; i++)
{
    curChar = buffer[i];
    if (curChar == '\0')
    {
        if (curValue.GetLength() > 0)
            HandleValue(curValue);
        curValue.Empty();
    }
    else
    {
        curValue.AppendFormat("%c", curChar);
    }
}
if (curValue.GetLength() > 0)
    HandleValue(curValue);
char缓冲区[最大字符串大小];
int charscont=::GetPrivateProfileString(“MySection”,NULL,NULL,buffer,MAX_STRING_SIZE,m_strIniPath);
CString曲线值;
curValue.Empty();
char curChar='\0';
for(int i=0;i0)
HandleValue(曲线值);
curValue.Empty();
}
其他的
{
AppendFormat(“%c”,curChar);
}
}
if(curValue.GetLength()>0)
HandleValue(曲线值);

这并不简单,因为它返回由零字符分隔的键(EOS?),所以我必须使用上面的循环来提取它们-为了每个可能需要它的人,在这里共享它。:-)

>你应该考虑使用(提供A):

属性树库提供了一个 存储数据的数据结构 任意深嵌套树 值,在每个级别由一些 钥匙树的每个节点都存储其 自身值,加上其 子节点及其键。树 允许轻松访问其任何节点 通过路径,这是一个 多个键的串联

此外,图书馆还提供 多个应用程序的解析器和生成器 可以表示的数据格式 通过这样一个树,包括XML、INI、, 和JSON


您不需要手动读取文件,但阅读以下内容的手册会有所帮助:

lpKeyName[in]:密钥的名称 要删除其关联的字符串 找回了如果此参数为空, 指定节中的所有键名称 由lpAppName参数复制 到指定的缓冲区 lpReturnedString参数


你看过GetPrivateProfile部分了吗

谢谢,这看起来比我需要的要多,但我一定要看一看。:)如果它对您有用的话,一旦我编写了一个类来管理一个使用
GetPrivateProfileSection
工作的INI部分,您可以在这里查看(/);这不是我写过的最漂亮或最现代的代码,但它过去工作得很好。:)@Matteo:谢谢,我已经有了解析值本身的代码。:)是的,这正是我所需要的——我觉得自己不知道这件事很愚蠢!抱歉,刚才不得不使用代码“for real”,该方法返回整个部分数据,而我只需要键-Eugen的答案更准确。