1. 程式人生 > >在Windows下C++獲得程式路徑

在Windows下C++獲得程式路徑

在Windows下C++程式設計經常需要獲得程式路徑,因為很多檔案都儲存在安裝資料夾下。

首先百度一下!偷笑

1、GetModuleFileName函式定義如下:

DWORD WINAPI GetModuleFileName(
    _In_opt_  HMODULE hModule,
    _Out_     LPTSTR lpFilename,
    _In_      DWORD nSize
);

獲取當前程序已載入模組的檔案的完整路徑,該模組必須由當前程序載入。

如果想要獲取另一個已載入模組的檔案路徑,可以使用GetModuleFileNameEx函式。

這裡的完全路徑中包括執行程式的檔名。所以要得到需要資料夾路徑需要將檔名去掉……

下面函式的功能實現了,程式碼如下:

	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
	}   
本來想用 TCHAR和__TEXT這類比較通用的,但是懶了……

呼叫函式即可得到。

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