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