众所周知,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);
}