为什么GetPrivateProfileString只使用相对路径但不能使用文件名?

时间:2014-11-25 11:57:50

标签: winapi path filepath ini

我有以下代码尝试从给定位置读取INI文件,如果失败则尝试在当前目录中打开。我的应用程序有两种执行模式,MAM和No MAM,因此是变量名。

{
    const char section[]="CONFIG";
    const char key[]="HEAP";
    char value[16];
    const char pwcfgFileMam[]="..\\pwcfg.ini";
    const char * const pwcfgFileNoMam = pwcfgFileMam + 1;
    long rc;
    DWORD rcProfile;

    value[0] = '\0';

    rcProfile= GetPrivateProfileString( section, key, "", value,
                                                sizeof(value)-1, pwcfgFileMam );

    if ( 0 == rcProfile )
    {
        rcProfile = GetPrivateProfileString( section, key, "", value,
                                              sizeof(value)-1, pwcfgFileNoMam );
    }

    // DO_SOMETHING(value);
}

根据official documentation,该功能仅适用于full paths这是绝对路径的另一个名称,但只要您放置.\或{{1},此代码段就可以正常工作路径上的前缀。我以前在第6行有一个错误,它编码如下:

..\

因此,该功能可能无法仅使用文件名,它至少需要const char * const pwcfgFileNoMam = pwcfgFileMam + 3; .到"找到"文件。我的老板告诉我,该功能在另一个进程或上下文或其他东西中运行,因此它需要"路径"强制此其他上下文查询其..的requirer。任何人都有一个更彻底的答案,为什么这个函数的行为像这样?这只是一个执行不当且记录严重的API的情况吗?

哦,顺便说一句,我在Windows 7计算机上使用Visual Studio 2008编译此代码。

0 个答案:

没有答案