如何知道GetPrivateProfileInt / String失败的原因

时间:2015-12-23 14:09:16

标签: c++ c windows winapi

我正在使用Visual Studio 2008中的C ++处理旧应用程序中的一段代码。它试图从INI文件中读取一些值,并且我试图在以下情况下进行一些错误处理。我试图阅读的部分或密钥在文件中不存在。

以下是代码段:

int nValue = GetPrivateProfileInt (SECTION, KEY, -1, sINIFile);
if(nValue == -1)  // default value
{
    int nLastError = GetLastError();
    if(nLastError != 0)
    {
        // do something
    }
}

sINIFile包含我所需的INI文件的完整路径。

经过一些测试后,我发现GetLastError()返回2(ERROR_FILE_NOT_FOUND),如果:

  1. 文件不存在或,

  2. 该部分不存在或,

  3. 密钥不存在。

  4. 我想知道GetPrivateProfileInt返回默认值的具体原因 - 这可能吗?

    注意:我已经考虑过检查“错误”的价值。 (或错误,如MSDN页面上所述)但对于上述任何情况,此值始终为0。

1 个答案:

答案 0 :(得分:2)

如果GetLastError()无效,那么你需要做一些侦探工作。您应该检查自己是否存在注册表项或文件(您知道大多数ini文件是否已映射到注册表,对吗?),或者如果该部分不存在(GetPrivateProfileSection),并且如果这两个文件都不适用,那么密钥不存在。