MFC 之获取文件路径和文件目录路径

这篇文章我们来介绍一个界面程序中常见的功能,那就是通过点击按钮打开文件浏览对话框,选择对应的文件或者文件夹后,获取其路径,并在编辑中显示出来,当然也会顺带讲一下如果获取当前可执行文件的路径和目录。

一、获取文件路径

首先我们从工具栏中拖拽一个编辑框和按钮控件到主对话框中,并为编辑框添加变量名 m_edit2

然后我们点击按钮,跳转到按钮点击事件的处理函数,并编写如下代码:

// 获取文件路径
void CBasicInterfaceConfigDlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	CString strFile = L"";

	// 创建一个 CFileDialog 对象 dlgFile,用于打开文件选择对话框
	CFileDialog dlgFile(TRUE,    // TRUE 表示打开文件而不是保存文件 
		NULL,    // 默认文件扩展名, 如果此参数为 NULL,则不附加扩展
		NULL,     // 显示在 Filename (文件名) 框中的初始文件名,如果为 NULL,则不显示初始文件名
		OFN_HIDEREADONLY,    // 可用于自定义对话框的一个或多个标志的组合 
		_T("All Files (*.*)|*.*|Config Files (*.cfg)|*.cfg||"),    // 一系列字符串对,用于指定可应用于文件的筛选器 
		NULL);    // 指向文件对话框的父窗口或所有者窗口的指针

	// 以模态方式显示文件选择对话框,如果用户选择了文件并点击了“打开”按钮,
	// DoModal 会返回 IDOK,否则返回 IDCANCEL
	if (dlgFile.DoModal())
	{
		// 获取用户选择的文件完整路径
		strFile = dlgFile.GetPathName();

		// 将目录显示在编辑框控件中
		m_edit2.SetWindowTextW(strFile.GetString());
	}
}

值得注意的是 dlgFile 函数的第五个参数,每个选择项由两部分组成,第一部分是选择项的显示名称,第二部分是实际筛选的后缀名,每个参数之间用 | 符号隔开,最后用两个 || 符号结尾,效果如下:

二、获取文件目录路径

首先我们从工具栏中拖拽一个编辑框和按钮控件到主对话框中,并为编辑框添加变量名 m_edit1

然后我们点击按钮,跳转到按钮点击事件的处理函数,并编写如下代码:

// 获取文件目录路径
void CBasicInterfaceConfigDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	WCHAR szPath[MAX_PATH];

	ZeroMemory(szPath, sizeof(szPath));

	// 定义一个用来配置文件夹浏览对话框的结构体
	BROWSEINFO bi;   
	bi.hwndOwner = this->m_hWnd;    // 指定对话框所有者的窗口句柄
	bi.pidlRoot = NULL;    // 限制了浏览的根目录,NULL表示没有限制
	bi.pszDisplayName = szPath;    // 用来存放用户选择的文件夹的路径
	bi.lpszTitle = L"请选择下载路径:";    // 设置对话框的标题
	bi.ulFlags = 0;    // 设置对话框的行为标志,0 表示使用默认行为
	bi.lpfn = NULL;    // 一个回调函数指针,用于处理对话框消息
	bi.lParam = 0;    // 传递给回调函数的用户定义的值
	bi.iImage = 0;    // 指定对话框中文件夹图标的索引

	// 弹出目录对话框
	LPITEMIDLIST lp = SHBrowseForFolder(&bi);
	if (lp && SHGetPathFromIDList(lp, szPath))
	{
		// 将目录显示在编辑框控件中
		m_edit1.SetWindowTextW(szPath);
	}
}

其实不难,通过一个结构体存储配置文件夹浏览对话框,弹出目录对话框进行选择即可得到文件的路径,选中后效果如下:

三、获取可执行文件当前路径

// 获取可执行文件的当前所在路径
void CBasicInterfaceConfigDlg::OnBnClickedButton4()
{
	// TODO: 在此添加控件通知处理程序代码
	TCHAR szPath[MAX_PATH];
	if (GetModuleFileName(NULL, szPath, MAX_PATH))
	{
		// 将可执行文件的当前路径显示在编辑框控件中
		m_edit4.SetWindowTextW(szPath);
	}
}

四、获取可执行文件当前所在目录

// 获取可执行文件的当前所在目录
void CBasicInterfaceConfigDlg::OnBnClickedButton5()
{
	// TODO: 在此添加控件通知处理程序代码
	TCHAR szPath[MAX_PATH];
	if (GetCurrentDirectory(MAX_PATH, szPath))
	{
		// 将可执行文件的当前目录显示在编辑框控件中
		m_edit3.SetWindowTextW(szPath);
	}
}
posted @ 2024-09-24 18:57  lostin9772  阅读(333)  评论(0编辑  收藏  举报