首页 > 其他分享 >MFC 之获取文件路径和文件目录路径

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

时间:2024-09-24 19:16:27浏览次数:8  
标签:控件 MFC 文件目录 对话框 路径 bi szPath NULL

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

一、获取文件路径

首先我们从工具栏中拖拽一个编辑框和按钮控件到主对话框中,并为编辑框添加变量名 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);
	}
}

标签:控件,MFC,文件目录,对话框,路径,bi,szPath,NULL
From: https://www.cnblogs.com/lostin9772/p/18429800

相关文章

  • MFC 之 Progress Control 控件的使用
    提到ProgressControl控件,大家可能会觉得在UI界面里面装一个进度条控件,一下就会让UI界面变得高级了些,所以可能会认为这个控件可能比较难搞。其实恰恰相反,这个控件使用起来特别容易,调用方法也就寥寥几个。不过本文重点内容并不是讲ProgressControl的使用,而是会重点介绍一......
  • 基于真实山地场景下的超多目标优化算法求解无人机三维路径规划,MATLAB代码
    超多目标优化算法是一类专门用于解决存在三个以上目标函数的最优化问题的算法。这类问题在现实世界中非常常见,例如在工程设计、资源管理、机器学习等领域。由于目标之间的冲突性,很难找到一个单一的解来同时优化所有目标,因此超多目标优化算法旨在找到一组解,这些解在目标之间......
  • 数字化转型的实践指南:业务能力建模的全景应用与企业创新路径
    在当今快速变化的商业环境中,数字化转型已成为企业持续创新和提升竞争力的关键战略。然而,如何有效规划、构建并管理企业的核心业务能力,确保企业在数字化时代能够敏捷应对市场变化,是许多企业面临的挑战。《业务能力指南》为这一问题提供了系统化的解决方案,通过业务能力建模的实践......
  • 收藏:加不加「/」?Nginx location 路径与 proxy_pass 的规律
    从一张梗图开始起源于在TG某个频道看到的一张图:图下面的评价是:Nginxissohard!实际上这张图描述的是nginxlocation的路径配置,及location代码块中proxy_pass的路径关系,属于nginx应用中路径转发的知识。例如图中Case1对应的代码块应该为:location/test1{......
  • MFC 程序基本界面配置
    不经常写MFC程序,虽然MFC的基础界面配置较为简单,但是每次很久没写MFC,再写的时候各种搜资料感觉还是挺麻烦的,所以写一个MFC的基本界面配置笔记,主要记录如何设置窗体大小、设置标题、修改图标、添加最大化最小化按钮、添加背景图等等,方便后续查阅。当然,我们首先要新建一个MF......
  • 程序员入门大模型的路径和资源,这篇足够了
    随着人工智能技术的加速演进,AI大模型已成为全球科技竞争的新高地,发展潜力巨大。通用大模型、行业大模型、端侧大模型等如雨后春笋般涌现,广泛应用于经济社会多个领域,如金融、医疗、电商、影视、传媒等,打开了通用人工智能的大门,推动了新一轮的科技革命与产业变革。今天给大......
  • 引领未来的数字化转型指南:全面解读《数字化专业知识体系》的核心策略与实践路径
    数字化时代的企业生存之道在全球商业环境迅速数字化的今天,企业的生存和发展面临着前所未有的挑战。技术的快速更替、市场的不确定性以及客户需求的多样化,迫使企业迅速调整战略和运营模式。《数字化专业知识体系》(《TowardsaDigitalProfessionalBodyofKnowledge》DPBOK)提......
  • 从理论到实践:全面指导企业实现数字化转型的战略路径
    全球企业数字化转型的必然性在全球范围内,数字化转型成为了企业战略中的核心命题。随着云计算、大数据、人工智能等新兴技术的快速发展,企业的运营模式、管理体系及客户体验正在发生深刻的变革。数字技术不仅为企业带来了新的商业机会,还使其有能力通过敏捷的战略调整提高市场竞......
  • LeetCode力扣——并查集:947. 移除最多的同行或同列石头,1971. 寻找图中是否存在路径,24
    947.移除最多的同行或同列石头题目描述947.移除最多的同行或同列石头n 块石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。给你一个长度为 n 的数组 stones ,其......
  • 数据飞轮不是奢望:从数据中台到数据飞轮的自然升级路径
    在现代企业的数字化转型中,数据中台已经是一个熟悉的概念,它作为企业数据资产管理的枢纽,支撑着信息的集成、管理和分析。然而,如果数据中台仅仅停留在存储和管理数据的层面,其潜力将大打折扣。此时,我们需转向更为动态和产生自我增长的模式——数据飞轮。面对这一切,很多企业可能会问:“......