獲取當前進程目錄 GetCurrentDirectory() 及 獲取當前運行模塊路徑名GetModuleFileName()

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 修改的。資源

相關文章
相關標籤/搜索