2017-02-09 60 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()'。 –

相關問題