我正在使用Visual Studio 2008中的C ++处理旧应用程序中的一段代码。它尝试从INI文件中读取一些值,并且在部分或关键字I的情况下尝试进行一些error handling我试图读取文件中不存在。
这里是代码片段:
int nValue = GetPrivateProfileInt (SECTION, KEY, -1, sINIFile); if(nValue == -1) // default value { int nLastError = GetLastError(); if(nLastError != 0) { // do something } }
sINIFile包含我所需的INI文件的完整path。
经过一些testing,我发现GetLastError()返回2(ERROR_FILE_NOT_FOUND),如果:
该文件不存在OR,
该部分不存在OR,
关键不存在。
我想知道GetPrivateProfileInt返回默认值的具体原因 – 这可能吗?
注意:我已经考虑检查'errno'(或者是在MSDN页面上说的errorno的值),但是对于上述任何情况,这个值总是为0。
如果GetLastError()不起作用,那么你需要做一些侦探工作。 您应该检查自己是否存在注册表项或文件(您知道大多数ini文件映射到注册表,对吗?),或者如果该部分不存在(GetPrivateProfileSection),并且如果这些都不适用,那么密钥不存在。