我是靠谱客的博主 秀丽宝贝,最近开发中收集的这篇文章主要介绍【路径相关方法】1,获取各种系统路径,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1,目的


介绍获取Windows常用的一些系统路径的方法(当前用户),如:桌面、我的文档等。

并提供简单封装为类PathHelper,供以后工程快捷调用。


2,原理&实现


第一部分 常用系统及进程目录


①获取系统system32路径:(c:windowssystem32)

 使用函数GetSystemDirectory.  CString版封装:

static CString GetSysFolder ()
{
TCHAR szPath[100] ={0};
GetSystemDirectory( szPath, 100 ) ;
return CString(szPath) ;
}
②获取 系统windows路径:(c:windows)

static CString GetWindowsFolder()
{
TCHAR szPath[100] ={0};
GetWindowsDirectory( szPath, 100 ) ;
return CString(szPath) ;
}

③获取模块运行所在文件夹(exe所在目录)

//获取运行目录(exe所在目录)
static CString GetModuleFolder( HMODULE hModule )
{
TCHAR
szPath[MAX_PATH] = {0} ;
GetModuleFileName( hModule, szPath, MAX_PATH ) ;
ZeroMemory(_tcsrchr(szPath,_T('\')), _tcslen(_tcsrchr(szPath,_T('\') ) )*sizeof(TCHAR)) ;
return CString(szPath) ;
}


④获取模块文件完整路径(包含exe文件名及后缀)

//获取运行模块文件全路径
static CString GetModuleFilePath( HMODULE hModule )
{
TCHAR
szPath[MAX_PATH] = {0} ;
GetModuleFileName( hModule, szPath, MAX_PATH ) ;
return CString(szPath) ;
}

上级目录

//得到上一级目录
static CString GetUpFolder(CString strPath)
{
int nPos = strPath.ReverseFind('\');
return strPath.Left(nPos);
}

附:PathHelper 小工具类头文件:

/*
提供简化的路径操作:如exe路径、系统路径、上级目录
*/
#ifndef PATH_HELPER_H
#define PATH_HELPER_H
class PathHelper
{
public:
PathHelper(){}
~PathHelper(){}
//得到上一级目录
static CString GetUpFolder(CString strPath)
{
int nPos = strPath.ReverseFind('\');
return strPath.Left(nPos);
}
//获取运行目录(exe所在目录)
static CString GetModuleFolder( HMODULE hModule )
{
TCHAR
szPath[MAX_PATH] = {0} ;
GetModuleFileName( hModule, szPath, MAX_PATH ) ;
ZeroMemory(_tcsrchr(szPath,_T('\')), _tcslen(_tcsrchr(szPath,_T('\') ) )*sizeof(TCHAR)) ;
return CString(szPath) ;
}
//获取运行模块文件全路径
static CString GetModuleFilePath( HMODULE hModule )
{
TCHAR
szPath[MAX_PATH] = {0} ;
GetModuleFileName( hModule, szPath, MAX_PATH ) ;
return CString(szPath) ;
}
static CString GetSysFolder ()
{
TCHAR szPath[100] ={0};
GetSystemDirectory ( szPath, 100 ) ;
return CString(szPath) ;
}
static CString GetWindowsFolder()
{
TCHAR szPath[100] ={0};
GetWindowsDirectory ( szPath, 100 ) ;
return CString(szPath) ;
}
};
#endif


第二部分 系统特殊路径


使用API: 

BOOL SHGetSpecialFolderPath(
	HWND hwndOwner,
	LPTSTR lpszPath,
	int nFolder,
	BOOL fCreate
);

参数说明:

HWND hwndOwner:如果在一个对话框或messagebox上显示时,用到的窗口句柄。这里我们单纯获取路径,一般设NULL。

LPTSTR lpszPath : 接收路径的字符串

int nFolder : 微软定义好的一个标志,用到代表要获取那种目录。

常见的如下:


CSIDL_BITBUCKET
回收站
CSIDL_CONTROLS
控制面板
CSIDL_DESKTOP
Windows
桌面Desktop
CSIDL_DESKTOPDIRECTORY
Desktop的目录
CSIDL_DRIVES
我的电脑
CSIDL_FONTS
字体目录
CSIDL_NETHOOD
网上邻居
CSIDL_NETWORK
网上邻居虚拟目录
CSIDL_PERSONAL
我的文档
CSIDL_PRINTERS
打印机
CSIDL_PROGRAMS
程序组
CSIDL_RECENT
最近打开的文档
CSIDL_SENDTO
“发送到”菜单项
CSIDL_STARTMENU
任务条启动菜单项
CSIDL_STARTUP
启动目录
CSIDL_TEMPLATES
文档模板

具体内容可以参照 shlobj.h 。

BOOL fCreate : 如果该文件夹不存在,是否创建它。 一般我们不改系统文件夹,就设FASLE。


调用示例:


CHAR szPath[MAX_PATH] = {0};
SHGetSpecialFolderPath(NULL, szPath,CSIDL_DESKTOP, FALSE);
MessageBox(szPath);	
效果:







最后

以上就是秀丽宝贝为你收集整理的【路径相关方法】1,获取各种系统路径的全部内容,希望文章能够帮你解决【路径相关方法】1,获取各种系统路径所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部