Mfc “从中选择多个文件”对话框
我想在MFC中启动一个对话框,选择多个文件并向用户显示此文件,然后将此文件复制到其他位置 我编写此代码是为了尝试实现这一点:Mfc “从中选择多个文件”对话框,mfc,Mfc,我想在MFC中启动一个对话框,选择多个文件并向用户显示此文件,然后将此文件复制到其他位置 我编写此代码是为了尝试实现这一点: CFileDialog fOpenDlg(TRUE,"", " ", OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST, "Capture file (*.cap)|*.cap|", this); fOpenDlg.m_pOFN->lpstrTitle="Import file"; fOpenDlg.m_pOFN->lpstr
CFileDialog fOpenDlg(TRUE,"", " ", OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST,
"Capture file (*.cap)|*.cap|", this);
fOpenDlg.m_pOFN->lpstrTitle="Import file";
fOpenDlg.m_pOFN->lpstrInitialDir="Desktop";
if(fOpenDlg.DoModal()==IDOK)
{
POSITION pos=fOpenDlg.GetStartPosition();
while(pos)
{
CString PathName=fOpenDlg.GetNextPathName(pos);
CString strFileName=fOpenDlg.GetFilename();
AfxMessageBox(strFileName);
}
}
问题是,当我选择单个文件时,它会给出文件名,但当我选择多个文件时,它不会给出任何文件名
我不知道原因是什么?函数GetFileName不适用于多个选定的文件。请参阅本页,解释如何使用OFN_ALLOWMULTISELECT
使用GetStartPosition/GetNextPathName函数,就像您在代码段中已经做的那样
如果您只想获得文件名,而不是每个文件的完整路径,请考虑使用SimITPATH函数,如本例中所示:
编辑: 要获得文件名,您可以添加一个类似于以下内容的函数:CString GetFileName(const CString& filePath)
{
TCHAR drive[_MAX_DRIVE];
TCHAR dir[_MAX_DIR];
TCHAR fname[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
_tsplitpath_s(filePath, drive, dir, fname, ext);
CString fileName;
fileName.Format(_T("%s%s"), fname, ext);
return fileName;
}
然后将显示消息框的代码替换为:
AfxMessageBox(GetFileName(PathName));
当我将它添加到您的代码示例中时,它对我起了作用。您想要的是:
CFileDialog fOpenDlg(TRUE,"", " ", OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST,
"Capture file (*.cap)|*.cap|", this);
fOpenDlg.m_pOFN->lpstrTitle="Import file";
fOpenDlg.m_pOFN->lpstrInitialDir="Desktop";
if(fOpenDlg.DoModal()==IDOK)
{
POSITION pos=fOpenDlg.GetStartPosition();
while(pos)
{
CString PathName=fOpenDlg.GetNextPathName(pos);
CString strFileName= ::PathFindFileName(PathName);
AfxMessageBox(strFileName);
}
}
注意CString strFileName=::PathFindFileNamePathName;行。我没有理解您想说的内容……我已经浏览了链接,但还有其他建议吗?我添加了一个建议,说明如何使用splitpath获取文件名。