一直使用GetCurrentDirectory()這個函數,今天發現了一個問題。
我的程序要讀入當前目錄下的配置文件,用下面代碼獲得其位置:
char szIni[200]={0};
::GetCurrentDirectory(NULL,szIni,200);
strcat(szIni,"\\opt.ini");
執行正常。發佈時,我用打包工具打包,執行安裝包後,最後一步將調用本程序,結果卻發現讀取配置文件爲空。百思不得其解。打印出szIni,卻發現此時的路徑指向臨時目錄!即安裝包文件釋放文件時所在目錄。究其原因,因爲此時本程序是被安裝包調用,所以此時的‘當前目錄’不是程序所在目錄,而是安裝包所在目錄。如果雙擊執行本程序,則運行正常。
解決問題的辦法就是換用函數,從GetModuleFileName()分離。代碼如下:
::GetModuleFileName(NULL,szIni,200);
char* p=strrchr(szIni,'\\'); //找到最後一個反斜槓的位置
p[0]=0;
strcat(szIni,"\\opt.ini");
全文完。謹此留痕。