获得程序当前的运行目录
2010-05-12 20:30
393 查看
http://www.cppblog.com/ally-zheng-2009/articles/98347.html
用GetModuleFileName获取程序当前执行文件名
需要获得程序当前的运行目录,这时就可以使用GetModuleFileName函数
DWORD WINAPI GetModuleFileName(
HMODULE hModule,
LPTSTR lpFileName,
DWORD nSize
);
hModule:要获取文件名的模块名柄,null表示当前模块
lpFileName:输出参数,存放取得的文件名
nSize:lpFileName参数的长度
例
void FileName()
{
TCHAR lpFileName[MAX_PATH];
::GetModuleFileName(null, lpFileName, MAX_PATH);
SetDlgItemText(IDC_TEXTBOX, lpFileName);
}
http://websky18.com/wlbc/vcbc/2010-04-21/669.html
在开发过程中经常需要获得程序当前的运行目录,这时就可以使用GetCurrentDirectory()和GetModuleFileName()函数,GetCurrentDirectory只是返回当前进程的当前目录,而并不是进程的镜像文件(.exe)所在的目录,GetCurrentDirectory()适用于XP等系统,,在WinCE上不能使用,GetModuleFileName()适用于WinCE2.0以后.
函数说明:
DWORD WINAPI GetModuleFileName(
HMODULE hModule,
LPTSTR lpFileName,
DWORD nSize
);
函数功能
此函数得到当前应用程序的运行目录,还包括应用程序的文件名。
参数说明
hModule:要获取文件名的模块名柄,可以是运用LoadLiberary得到的句柄,null表示当前模块
lpFileName:输出参数,存放取得的文件名
nSize:lpFileName参数的长度
DWORD GetCurrentDirectory(
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);
}
GetModuleFileName函数
WINAPI DWORD GetModuleFileName(
HMODULE hModule,
LPWSTR lpFilename,
DWORD nSize
);
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文件所在的目录
用GetModuleFileName获取程序当前执行文件名
需要获得程序当前的运行目录,这时就可以使用GetModuleFileName函数
DWORD WINAPI GetModuleFileName(
HMODULE hModule,
LPTSTR lpFileName,
DWORD nSize
);
hModule:要获取文件名的模块名柄,null表示当前模块
lpFileName:输出参数,存放取得的文件名
nSize:lpFileName参数的长度
例
void FileName()
{
TCHAR lpFileName[MAX_PATH];
::GetModuleFileName(null, lpFileName, MAX_PATH);
SetDlgItemText(IDC_TEXTBOX, lpFileName);
}
http://websky18.com/wlbc/vcbc/2010-04-21/669.html
在开发过程中经常需要获得程序当前的运行目录,这时就可以使用GetCurrentDirectory()和GetModuleFileName()函数,GetCurrentDirectory只是返回当前进程的当前目录,而并不是进程的镜像文件(.exe)所在的目录,GetCurrentDirectory()适用于XP等系统,,在WinCE上不能使用,GetModuleFileName()适用于WinCE2.0以后.
函数说明:
DWORD WINAPI GetModuleFileName(
HMODULE hModule,
LPTSTR lpFileName,
DWORD nSize
);
函数功能
此函数得到当前应用程序的运行目录,还包括应用程序的文件名。
参数说明
hModule:要获取文件名的模块名柄,可以是运用LoadLiberary得到的句柄,null表示当前模块
lpFileName:输出参数,存放取得的文件名
nSize:lpFileName参数的长度
DWORD GetCurrentDirectory(
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);
}
GetModuleFileName函数
WINAPI DWORD GetModuleFileName(
HMODULE hModule,
LPWSTR lpFilename,
DWORD nSize
);
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文件所在的目录
相关文章推荐
- 几个代码片段-计算程序运行时间+获得当前目录+生成MD5
- C++中用 GetModuleFileName()函数 获得程序当前的运行目录
- 获得当前应用程序的运行目录
- C语言-获取程序运行的当前目录函数GetCurrentDirectory
- oracle 使用database control 配置数据库时,要求在当前oracle主目录中配置监听程序,必须运行Netca以配置
- 获取任意文件路径及文件名、运行程序当前目录
- VC++获得当前进程运行目录的方法
- c# winform 获取当前程序运行根目录 (转)
- 怎样获取程序运行的当前目录
- 获取当前运行程序的目录
- 获得程序当前目录
- c# winform 获取当前程序运行根目录
- C#如何获得当前程序所在的目录
- VC++编译后程序运行的当前目录?
- 使用database control 配置数据库时,要求在当前oracle主目录中配置监听程序,必须运行Netca以配置监听程序,然后才能继续。或者可以选择继续,但是不要使用database cont
- c#获取当前运行程序所在的目录
- 获得程序当前目录
- c# winform 获取当前程序运行根目录
- MFC 获得当前程序目录 当前绝对路径
- C#获取当前程序运行目录大全