獲取當前目錄用GetCurrentDirectory()與從GetModuleFileName()分離之異同

  一直使用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");

  全文完。謹此留痕。

 

發佈了57 篇原創文章 · 獲贊 31 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章