:: GetPrivateProfileString读取INI文件的整个部分

我正在修改现有的C ++应用程序,并移出一些当前硬编码的值。

我正在做一个类,将“pipe理”这整个事情,并保持从INI文件的值map<CString, CString>的值。

现在我必须读取每个值分别使用::GetPrivateProfileString函数 – 我可以以某种方式阅读整个部分,而不是单个值?

不要手动读取文件,但如果有任何合理的(即高效+简单易用)现有的方式,我愿意提供build议。

编辑:只是现在不得不使用它“真实”,解决scheme确实传递NULL作为lpKeyName值。 完整的代码,包括parsing返回值:

 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); 

这不是微不足道的,因为它返回由零字符(EOS?)分隔的密钥,所以我不得不使用上面的循环提取它们 – 在这里分享它为了所有需要它的人。 🙂

Solutions Collecting From Web of ":: GetPrivateProfileString读取INI文件的整个部分"

您不需要手动读取文件,但它有助于阅读GetPrivateProfileString手册:

lpKeyName [in]:要检索关联字符串的键的名称。 如果此参数为NULL,则将由lpAppName参数指定的部分中的所有键名称复制到由lpReturnedString参数指定的缓冲区中

您应该考虑使用Boost.PropertyTree (它提供了一个INI分析器 ):

属性树库提供了一个数据结构,它存储了一个任意深度嵌套的值的树,每个级别都由一些关键字索引。 树的每个节点都存储它自己的值,加上它的子节点和它们的键的有序列表。 树允许通过多个键串联的路径方便地访问其任何节点。

另外,这个库提供了许多数据格式的解析器和生成器,这些数据格式可以用这样的树来表示,包括XML,INI和JSON。

你看了GetPrivateProfileSection? http://msdn.microsoft.com/en-us/library/ms724348(VS.85).aspx