在Windows下C++獲得程式路徑
阿新 • • 發佈:2019-02-07
在Windows下C++程式設計經常需要獲得程式路徑,因為很多檔案都儲存在安裝資料夾下。
首先百度一下!
1、GetModuleFileName函式定義如下:
DWORD WINAPI GetModuleFileName(
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);
獲取當前程序已載入模組的檔案的完整路徑,該模組必須由當前程序載入。
如果想要獲取另一個已載入模組的檔案路徑,可以使用GetModuleFileNameEx函式。
這裡的完全路徑中包括執行程式的檔名。所以要得到需要資料夾路徑需要將檔名去掉……
下面函式的功能實現了,程式碼如下:
本來想用 TCHAR和__TEXT這類比較通用的,但是懶了……wstring GetProgramDir() { TCHAR exeFullPath[MAX_PATH]; // Full path GetModuleFileName(NULL,exeFullPath,MAX_PATH); wstring strPath = __TEXT(""); strPath = (wstring)exeFullPath; // Get full path of the file int pos = strPath.find_last_of(L'\\', strPath.length()); return strPath.substr(0, pos); // Return the directory without the file name }
呼叫函式即可得到。
2、GetCurrentDirectory函式
定義如下:
DWORD GetCurrentDirectory(
DWORD nBufferLength,//sizeofdirectorybuffer
LPTSTR lpBuffer//directorybuffer
);
函式功能:獲取當前程序的當前目錄。
注意當前目錄這東西有點怪異,本來確實是可執行檔案的所在目錄,但是當用檔案對話方塊成功開啟一個檔案後,該目錄就被修改為被開啟的檔案所在目錄。比如在程式中使用"123.txt"這樣的檔名,希望將它儲存在exe檔案所在目錄中,但是當用戶用檔案對話方塊開啟一個檔案"F:\456.txt"後,這個123.txt會被儲存到F盤下。(VC2005下的情況,其他VC版本待驗證)
參考文章:
http://www.cnblogs.com/pegasus923/archive/2010/11/02/1867584.html
http://baike.baidu.com/link?url=0zkwvBhzPyZbD4p0qcYuX4yGnKrWcJv01xMm64jHwKKrnhQMuOz4KvTQESCnLOyLbxYMCORp4NMKm7fQRIJEYq
http://baike.baidu.com/link?url=KnnbF7aLBZh7nabBmOgkp2qo7mAXuL5hHi_PVZ5P4pzvsHGG85VQbIgsQYAAAgwbJqTgpeUg4U5A_NQ6CRAjma#2_1