众所周知,CFileDialog类和CFileDialogImpl类(一个是接口类,一个是实现类)用于显示文件打开和保存对话框,CFileDialogImpl类中最重要的两个成员是m_ofn 和m_szFileName。但是,请注意m_szFileName 是一个TCHAR 数组,用来保存选择的文件名。如果选择了多个文件,他的结构为:
路径/0第一个文件名/0第二个文件名/0第三个文件名/0/0
多于三个的以此类推。
下面是我的一个解析方法:
CMyFileDialog fileDlg ( true, _T("docx"), _T(""), OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT, _T("Word 12 Files|*.docx|All Files|*.*|") );
if ( IDOK == fileDlg.DoModal() )
{
CString outputStr(_T("文件排列:/n"));
TCHAR *beginPos = fileDlg.m_szFileName;
TCHAR *pTmpPos = beginPos;
BOOL bIsPath = TRUE;
CString pathStr(_T(""));
do
{
if ('/0' == *pTmpPos)
{
if ('/0' == *(pTmpPos + 1))
{
outputStr = outputStr + pathStr + beginPos + _T("/n");
break;
}
else
{
if (bIsPath)
{
pathStr = beginPos;
pathStr += _T("//");
bIsPath = FALSE;
}
else
{
outputStr = outputStr + pathStr + beginPos + _T("/n");
}
beginPos = pTmpPos + 1;
pTmpPos = beginPos;
continue;
}
}
else
{
++pTmpPos;
}
} while (1);
MessageBox(outputStr);
}

本文介绍使用CFileDialog进行多文件选择后的解析方法。通过分析CFileDialog返回的m_szFileName结构,提供了一种遍历并获取所有选定文件路径的实用代码示例。
4947

被折叠的 条评论
为什么被折叠?



