如何在C ++中读取与由反斜杠分隔的键对应的值

时间:2019-07-18 12:27:31

标签: c++ ini

我要在C ++中读取和解析ini文件中的一部分

我试图在GetPrivateProfileString的帮助下阅读它,但它最多读取到“ $ THIS $ = somevalue”,\并且不再进一步阅读。

file.ini

[Mysection]
UserDefinedVariables="$THIS$=somevalue",\
"$THAT$=somevalue1",\
"$DEVICE1$=somevalue2",\
"$DEVICE2$=somevalue3",\
"$DEVICE3$=somevalue4"

c ++文件

wchar_t deviceName[200];
GetPrivateProfileString(L"Mysection", L"UserDefinedVariables", NULL, deviceName, sizeof(deviceName), file.ini);

在这里,我特别感兴趣与$ DEVICE1 $相对应的值,即somevalue2。 有什么办法可以利用Windows API来读取它吗?

1 个答案:

答案 0 :(得分:0)

是的。您可以使用此功能。但我怀疑这是您想要做的。

问题在于您的输入文件错误。末尾的\通常是行的连接器。因此,所有文本都应该在一行中。然后应该解析结果。

下一行再次被视为具有值的键。

但是密钥不是您所期望的$ DEVICE1 $,而是“ $ DEVICE1 $。请参阅附加内容”。请阅读功能docu

如果您搜索该键,则会得到结果。但是这里再次附加了“。

所以以下几行的格式不正确,原因是我之前解释过的。要查看此功能的工作方式(首先不要使用),请参见以下代码:

#include <Windows.h>
#include <iostream>

int main()
{
    wchar_t deviceName[400];

    GetPrivateProfileString(L"Mysection", L"UserDefinedVariables", NULL, deviceName, sizeof(deviceName), L"r:\\file.ini");
    std::wcout << "searching for key UserDefinedVariables --> " << deviceName << '\n';


    // Get all keys
    std::wcout << "\n\nSearching for all keys in section:\n";
    DWORD size = GetPrivateProfileString(L"Mysection", NULL, NULL, deviceName, sizeof(deviceName), L"r:\\file.ini");

    DWORD start = 0;
    wchar_t keys[10][100];
    DWORD keyIndex = 0;

    for (DWORD i = 0; i < size; ++i) {
        if (deviceName[i] == 0) {
#pragma warning(suppress : 4996)
            wcscpy(keys[keyIndex], deviceName + start);
            start = i + 1;
            std::wcout << keys[keyIndex] << '\n';
            ++keyIndex;
        }
    }

    // Getting all values for the keys
    std::wcout << "\n\nSearching for all keys with values in section:\n";

    for (DWORD i = 0; i < keyIndex; ++i) {
        GetPrivateProfileString(L"Mysection", keys[i], NULL, deviceName, sizeof(deviceName), L"r:\\file.ini");
        std::wcout << keys[i] << " -->  " << deviceName << '\n';
    }
    return 0;
}

结果:

searching for key UserDefinedVariables --> "$THIS$=somevalue",\


Searching for all keys in section:
UserDefinedVariables
"$THAT$
"$DEVICE1$
"$DEVICE2$
"$DEVICE3$


Searching for all keys with values in section:
UserDefinedVariables -->  "$THIS$=somevalue",\
"$THAT$ -->  somevalue1",\
"$DEVICE1$ -->  somevalue2",\
"$DEVICE2$ -->  somevalue3",\
"$DEVICE3$ -->  somevalue4"

然后您可以根据需要提取值。

但是正如我所说。最好更正ini文件。

相关问题