獲得程式當前的執行目錄

2021-05-22 12:37:28 字數 2501 閱讀 6774

用getmodulefilename獲取程式當前執行檔名

需要獲得程式當前的執行目錄,這時就可以使用getmodulefilename函式

dword winapi getmodulefilename(

hmodule hmodule,

lptstr lpfilename,

dword nsize

);hmodule:要獲取檔名的模組名柄,null表示當前模組

lpfilename:輸出引數,存放取得的檔名

nsize:lpfilename引數的長度

例void filename()

在開發過程中經常需要獲得程式當前的執行目錄,這時就可以使用getcurrentdirectory()和getmodulefilename()函式,getcurrentdirectory只是返回當前程序的當前目錄,而並不是程序的映象檔案(.exe)所在的目錄,getcurrentdirectory()適用於xp等系統,,在wince上不能使用,getmodulefilename()適用於wince2.0以後.

函式說明:

dword winapi getmodulefilename(

hmodule hmodule,

lptstr lpfilename,

dword nsize

);函式功能

此函式得到當前應用程式的執行目錄,還包括應用程式的檔名。

引數說明

hmodule:要獲取檔名的模組名柄,可以是運用loadliberary得到的控制代碼,null表示當前模組

lpfilename:輸出引數,存放取得的檔名

nsize:lpfilename引數的長度

dword getcurrentdirectory(

dword nbufferlength, // size of directory buffer

lptstr lpbuffer // directory buffer

);函式功能

找到當前程序的當前目錄

引數說明

nbufferlength:lpbuffer緩衝區的長度

lpbuffer:指定乙個預定義字串,用於裝載當前目錄

返回值

呼叫成功 返回裝載到lpbuffer的位元組數。

使用方法:

//下面的一段**主要是獲得當前程式的執行目錄(.exe)所在的目錄

getmodulefilename函式

winapi dword getmodulefilename(

hmodule hmodule,

lpwstr lpfilename,

dword nsize

);getbuffer和releasebuffer是一套需要配合使用的函式, 與getbuffersetlength相比, 優點是如果分配的空間大於實際儲存的字串(0結尾),releasebuffer會把多餘申請的空間釋放, 歸還給系統; 但使用時需要注意以下問題: 如果要儲存的字串為abc(0結尾),則getbuffer引數應至少為3; 如果要儲存的內容不是以0結尾, 比如是讀取檔案資料, 則getbuffer引數如果大於檔案長度時,releasebuffer引數一定要為檔案長度(如果getbuffer引數為檔案長度的話不存在問題,releasebuffer引數可以為預設-1)! getbuffersetlength相對比較容易理解, 它申請乙個指定長度的空間, 即使裡面最終儲存的字串長度小於申請的空間長度, 也不會將多餘空間釋放.

呼叫示例:

tchar *path = new tchar[max_path];

zeromemory(path, max_path);

// path == "d:/project/test/mfc/mfc/debug"

getcurrentdirectory(max_path, path);

// path ==  "d:/project/test/mfc/debug/mfc.exe"

getmodulefilename(null,path,max_path);

補充說明:

如果想得到乙個已經載入的dll檔案的路徑,可以運用以下方法:

char  strpath[max_path];  

getmodulefilenamea(getmodulehandle("你的dll名字"),strpath,max_path);

int j=strlen(strpath);

for(j=strlen(strpath);strpath[j]!='//';j--);

strpath[j]='/0'; 

其中strpath即為你的dll檔案所在的目錄

VS2010獲得程式當前執行目錄函式詳解

每個windows程式都有乙個自己的當前目錄,預設是程式exe檔案所在的目錄。系統在給程式載入動態鏈結庫檔案 dll 時先在程式當前目錄裡查詢要載入的dll,如果在此目錄下沒有找到系統便會去windows目錄下查詢。在這兒我們主要將如何獲得程式的當前目錄,如果沒有自己去設定,我們可以把此目錄看成程序...

C 獲取程式執行目錄當前目錄

獲取程式的基目錄。獲取模組的完整路徑。system.diagnostics.process.getcurrentprocess mainmodule.filename 獲取和設定當前目錄 該程序從中啟動的目錄 的完全限定目錄。system.environment.currentdirectory 獲...

獲取當前程式執行目錄

1.使用 getcwd std string getmodulepath char path nullptr path char malloc ilength sizeof char path getcwd modulepath,ilength if null path free path if f...