您的位置:首页 > 其它

MFC 获取当前路径

2015-10-14 16:23 239 查看
第一种方法:

DWORD GetCurrentDirectory(

DWORD nBufferLength, // size, in characters, of directory buffer

LPTSTR lpBuffer // pointer to buffer for current directory

);

BOOL SetCurrentDirectory(

LPCTSTR lpPathName // pointer to name of new current directory

);

第二种方法

用GetModuleFileName得到应用程序的文件名(第一个参数为NULL)

再用_splitpath分析文件名得到路径

例如:

//得到当前路径

/*char buf[100];

GetCurrentDirectory(sizeof(buf),buf);

MessageBox(buf);

HINSTANCE hInst=NULL;

hInst=AfxGetApp()->m_hInstance;

char path_buffer[_MAX_PATH];

GetModuleFileName(hInst,path_buffer,sizeof(path_buffer));//得到exe文件的全路径

//分离路径和文件名。

char drive[_MAX_DRIVE];

char dir[_MAX_DIR];

char fname[_MAX_FNAME];

char ext[_MAX_EXT];

_splitpath( path_buffer, drive, dir, fname, ext );

CString Path;

Path.Format("%s%s",drive,dir);

char path[300];

strcpy(path,drive);

HMODULE hModule,

LPTSTR lpFileName,

DWORD nSize

);

函数功能

此函数得到当前应用程序的运行目录,还包括应用程序的文件名。

参数说明

hModule:要获取文件名的模块名柄,可以是运用LoadLiberary得到的句柄,null表示当前模块

lpFileName:输出参数,存放取得的文件名

nSize:lpFileName参数的长度

   DWORD nBufferLength, // size of directory buffer

   LPTSTR lpBuffer // directory buffer

   );

函数功能

 找到当前进程的当前目录

参数说明

  nBufferLength:lpBuffer缓冲区的长度

  lpBuffer:指定一个预定义字串,用于装载当前目录

返回值

 调用成功 返回装载到lpBuffer的字节数。

//下面的一段代码主要是获得当前程序的运行目录(.exe)所在的目录

{

CString path;

GetModuleFileName(NULL,path.GetBufferSetLength(MAX_PATH+1),MAX_PATH);

path.ReleaseBuffer();

int pos = path.ReverseFind('\\');

path = path.Left(pos);

}

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文件所在的目录

strcat(path,dir);

在开发过程中经常需要获得程序当前的运行目录,这时就可以使用GetCurrentDirectory()和GetModuleFileName()函数,GetCurrentDirectory只是返回当前进程的当前目录,而GetModuleFileName()返回的是进程的镜像文件(.exe)所在的目录,GetCurrentDirectory()适用于XP等系统,,在WinCE上不能使用,GetModuleFileName()适用于WinCE2.0以后.

函数说明:

DWORD WINAPI GetModuleFileName(

DWORD GetCurrentDirectory(

使用方法:

调用示例:

补充说明:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: