引言:今天阅读前人源码,看见一个提取文件名字的功能,用了string的函数折腾了一大堆,结果一查MsDoc,微软原来早都提供了5个用于提取文件名称的函数。
个人技术博客(文章整理+源码):zobol的windows编程教程 | LearnWinAPI
最终效果:
1.CFileDialog::GetPathName
调用此函数可得到在对话框中输入的文件的完整路径。
CString GetPathName() const;
2.CFileDialog::GetFileName
调用此函数可得到在对话框中输入的文件名的名称。
CString GetFileName() const;
3.CFileDialog::GetFileTitle
调用此函数可得到在对话框中输入的文件的标题。
CString GetFileTitle() const;
4.CFileDialog::GetFolderPath
调用此成员函数可得到当前打开的文件夹或目录的路径,以用于资源管理器样式的“打开”或“另存为公用”对话框。
CString GetFolderPath() const;
5.CFileDialog::GetFileExt
调用此函数可得到输入对话框的文件名的扩展名。
CString GetFileExt() const;
6.官方网站:
https://docs.microsoft.com/en-us/cpp/mfc/reference/cfiledialog-class?view=msvc-170
源码:
static TCHAR BASED_CODE szFilter[] = _T("Chart Files (*.xlc)|*.xlc|")
_T("Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|")
_T("*.xlc; *.xls|All Files (*.*)|*.*||");
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter,NULL,NULL,1);
if (dlg.DoModal() != IDOK)
{
CommDlgExtendedError();
}
else {
CString filePathName = dlg.GetPathName();//完整的文件路径
CString fileName = dlg.GetFileName(); // 只有文件名字和后缀
CString fileExt = dlg.GetFileExt(); // 只有后缀
CString fileTitle = dlg.GetFileTitle(); // 只有文件名
CString path = dlg.GetFolderPath();// 只有文件路径
}
效果:
本人个人技术博客: zobol的windows编程教程 | LearnWinAPI,个人公众号:zobol的魔法藏书室,知乎,B站:zobol