GetCurrentDirectory 得到的是當前進程的活動目錄(資源管理器決定的),能夠用SetCurrentDirectory 修改的。緩存
轉自 http://m.blog.csdn.net/blog/scuthanman/10094793函數
GetModuleFileName函數能夠獲取當前執行模塊所在位置的絕對路徑名,不管是哪裏的進程對模塊進行調用。spa
而GetCurrentDirectory獲取的是當前進程所在的當前目錄,跟執行模塊所在的位置並無關係,返回的是主進程所在目錄。.net
GetCurrentDirectory函數原型
DWORD GetCurrentDirectory(
DWORD nBufferLength,
LPTSTR lpBuffer
);
Parameters nBufferLength: 接收保存路徑的字符串緩存長度, 緩存必須有一個保存結束的空字符的位置. lpBuffer:指向接收字符串的緩存,收到的非空字符串指定了當前目錄的絕對路徑.
The GetCurrentDirectory function retrieves the current directory for the current process.
TCHAR path[MAX_PATH] = {0}; GetCurrentDirectory(MAX_PATH, path);
GetCurrentDirectory返回當前進程的當前目錄,並不必定返回你的exe應用程序的目錄。若是你在應用程序中調用了打開文件對話框,你選擇了一個文件,那麼,這個文件所在的目錄就成了當前進程的當前目錄了。
#include "stdafx.h" #include <Windows.h>
int _tmain(int argc, _TCHAR* argv[]) { TCHAR path[MAX_PATH] = {0}; GetCurrentDirectory(MAX_PATH, path); wprintf(L"%s\n", path); TCHAR pathm[MAX_PATH]; GetModuleFileName(NULL, pathm, MAX_PATH); wprintf(L"%s\n", pathm); system("pause"); return 0; }
二、指針
DWORD GetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
函數參數說明:
hModule HMODULE 裝載一個程序實例的句柄。若是該參數爲NULL,該函數返回該當前應用程序全路徑。
lpFileName LPTSTR 是你存放返回的名字的內存塊的指針,是一個輸出參數
nSize DWORD ,裝載到緩衝區lpFileName的最大值
函數返回值:
若是返回爲成功,將在lpFileName的緩衝區當中返回相應模塊的路徑,若是所爲的nSize太小,哪麼返回僅按所設置緩衝區大小返回相應字符串內容。
若是函數失敗,返回值將爲0,並返回GetLastError異常代碼。
須要的頭文件爲:
include Windows.hcode
下面的例子是錯的,由於不肯定前進程目錄是固定的blog
if (_access("uny.ini", 0) == 0) { //首先檢查當前路徑是否存在配置文件 strcpy(&sCfgFile[0], DEFAULT_CFG_FILE); } else { GetSystemDirectoryA(sCfgFile, sizeof(sCfgFile) - 1); strcat(&sCfgFile[0], "\\"); strcat(&sCfgFile[0], DEFAULT_CFG_FILE); }
應該用 進程
TCHAR module_path[MAX_PATH] = { 0 }; DWORD dw_ret = GetModuleFileName(NULL, module_path, MAX_PATH); _tstring dll_path = module_path; if (0 != dw_ret) { size_t pos = dll_path.find_last_of('\\'); if (-1 != pos) { dll_path = dll_path.substr(0, pos + 1); } }
獲取exe所在的目錄,不會根據進程目錄的改變而改變。內存
要知道進程的目錄是能夠用 SetCurrentDirectory 修改的。資源