2017-02-09 100 views
0

嗯,标题说这是我的问题GetPrivateprofilestring并不在当前目录下得到一个ini文件

我的.cpp代码:

GetPrivateProfileString("Server","MainDns","ServerDns", 
    g_DataBaseDns,sizeof(g_DataBaseDns),".\\Server.ini"); 

当我使用:

GetPrivateProfileString("Server","MainDns","ServerDns", 
    g_DataBaseDns,sizeof(g_DataBaseDns),"..\\Server.ini"); 

并将ini文件放在后面的文件夹中:正常工作!

我在做什么错?

+0

你尝试无单点符号? (即:“Server.ini”) – manuell

+0

是的!不成功:/ –

+2

这是一个相当可怕的功能,不应该再使用。最后一个参数的文档说:“如果此参数不包含该文件的完整路径,系统将在Windows目录中搜索该文件。” –

回答

0

您需要首先调用GetFullPathName()获得绝对路径,这是根据对GetPrivateProfileString()文件要求:

初始化文件的名称。 如果此参数不包含文件的完整路径,系统将搜索Windows目录中的文件。

例如:

TCHAR sAbsolutePathBuffer[2048] = _T(""); 
if (GetFullPathName(TEXT("Server.ini"), sizeof(sAbsolutePathBuffer)/sizeof(TCHAR), sAbsolutePathBuffer, NULL)) 
{ 
    GetPrivateProfileString(TEXT("Server"), TEXT("MainDns"), TEXT("ServerDns"), 
     g_DataBaseDns, sizeof(g_DataBaseDns), sAbsolutePathBuffer); 
} 
+1

请注意,'GetFullPathName()'使用调用进程的当前工作目录将相对路径转换为绝对路径,而不是运行进程可执行文件的目录。 'GetFullPathName()'文件对此提出警告。要创建一个相对于可执行文件路径的绝对路径,可以考虑使用'GetModuleFileName(NULL)','Path(Cch)RemoveFileSpec()'和Path(Cch)Combine()'。 –

相关问题