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

2021-09-02 18:44:00 字數 1342 閱讀 8315

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

函式原型: 

dword getcurrentdirectory(dword nbufferlength,lpwstr lpbuffer)

函式返回值: 

返回0表示失敗,當函式呼叫成功將返回寫入緩衝區的字串長度

和以前一樣我們有兩種方法來確定緩衝區長度: 

1、使用已定義的常量max_path(260); 

2、使用給函式傳入null的方法獲得緩衝區長度。

下面是函式的使用方法: 

wstring info::getmydirectory() 

delete path; 

return wstr; 

}

需要注意此函式有個特點或者說問題,因為getcurrentdirectory只是返回作業系統的當前目錄,並不一定返回你的應用程式的目錄。比如你在應用程式中呼叫了開啟檔案對話方塊,你選擇了乙個檔案,那麼,這個檔案所在的目錄就成了作業系統的當前目錄了。因此,千萬不要用這個函式作為獲取應用程式目錄的手段。但是誰叫有時候懶得處理字串呢,比如程式一執行就呼叫getcurrentdirectory()那獲取到的還是程式所在目錄的。

獲取當前應用程式主目錄的方法是getmodulefilename,先獲取應用程式檔案路徑,然後擷取調應用程式檔名稱就是應用程式主目錄了。

使用此函式獲取到的是如:d:\c engineering\mourne\debug\lala.txt   這樣的完整的目錄,為了使用我們還得去掉"\lala.txt"這一小段具體的程式名。

cstring cerem,onies;

wstring wstr; 

wchar_t *path=new wchar_t[256]; 

getmodulefilename(null,path,256); //獲取程式目錄存在path變數中

wstr=path;

cerem=wstr.c_str();

cerem = cerem.left(cerem.reversefind('\\')); //處理獲得的字串把"\××.exe"從字串中去掉

writeconsole(hdlwrite, cerem, wcslen(cerem), null, null); //向dos視窗裡輸出字串

delete path; //釋放動態申請的記憶體

參考資料:

VS2010 執行加速

前段時間為了乙個專案而把vs2008換成了vs2010,結果原本就不堪重負的本本跑起vs2010來那更是慢得沒話說,於是看了遍vs2010選項,又從網上到處找資料找優化方法,總算使我的vs2010跑得快了些。一 vs2010選項視覺體驗設定 工具 選項 環境 視覺體驗的勾選都去掉。不解釋,你懂得。二...

VS2010專案複製

好久沒寫日記了,忙的沒時間記錄,只埋頭編碼,不停下來思考和總結是不好滴啊!在做的乙個專案終於決定要分化出不同版本了,伺服器和客戶端。用乙個巨集來控制倆版本實在是不舒服,而且隱約覺得版本的區別將越來越大,如果繼續用巨集來控制,豈不是要把自己搞暈。從原有的專案 2 in 1,這是乙個使用巨集server...

VS2010 建立WebSerive程式

visual studio 2010預設採用的框架為.net framework4,在這個框架中已找不到直接建立webservice的模板方式了。但vs2010可以建立webservice是毋庸置疑的,那麼怎麼在vs2010中建立webservice呢,請看下面為您提供的兩種方法,方法已經本人測試,...