使用CFileDialog 打开多个文件,获取文件路径。一般的使用情况为同一个文件夹目录下的某些文件,除文件名不一致外,前面路径均一样,使用GetStartPosition(),GetNextPathName()无问题;
但是对于打开文件夹目录,采用搜索的方式,显示出若干文件,且不在同一目录下,再采用上述方式,就出现了问题,不能准确获取前缀的文件夹目录地址,仅仅使用了第一个文件的绝对地址来覆盖后续的多选文件
查了好多资料,均给的第一种方式,但是并不能解决我所出现的问题,最后终于找到了一篇解决问题的帖子,现将代码等展示如下
参考地址:http://bbs.csdn.net/topics/391926645
两种方式代码如下:
方式1:
CString strFilter = _T("所有支持的视频文件|*.ts;*.mp4;*.flv|MPEG-2 视频文件|*.ts|MPEG-4 视频文件|*.mp4|Adobe Flash Video|*.flv|其他文件类型|*.*||");
CFileDialog dlg(TRUE, _T(""), _T(""), OFN_ALLOWMULTISELECT |OFN_ENABLESIZING|OFN_HIDEREADONLY, strFilter);
// Create buffer for file names.
const DWORD numberOfFileNames = 100;
const DWORD fileNameMaxLength = MAX_PATH + 1;
const DWORD bufferSize = (numberOfFileNames * fileNameMaxLength) + 1;
TCHAR* filenamesBuffer = new TCHAR[bufferSize];
// Initialize beginning and end of buffer.
filenamesBuffer[0] = NULL;
filenamesBuffer[bufferSize-1] = NULL;
memset(filenamesBuffer,0,sizeof(TCHAR)*bufferSize);
// Attach buffer to OPENFILENAME member.
dlg.m_ofn.lpstrFile = filenamesBuffer;
dlg.m_ofn.nMaxFile = bufferSize;
// Create array for file names.
CString fileNameArray[numberOfFileNames];
if(dlg.DoModal() == IDOK)
{
// Retrieve file name(s).
POSITION fileNamesPosition = dlg.GetStartPosition();
int iCtr = 0;
while(fileNamesPosition != NULL && iCtr < numberOfFileNames)
{
fileNameArray[iCtr] = dlg.GetNextPathName(fileNamesPosition);
//其中fileNameArray[iCtr] 中为路径地址
iCtr++;
}
}
上述方式一不能满足搜索不同目录下同时打开多个文件的需求
方式二,此方式解决不同目录下同时打开多个文件获取文件路径的需求
CString strFilter = _T("所有支持的视频文件|*.ts;*.mp4;*.flv|MPEG-2 视频文件|*.ts|MPEG-4 视频文件|*.mp4|Adobe Flash Video|*.flv|其他文件类型|*.*||");
CFileDialog OpenDialog(TRUE, _T(""), _T(""),OFN_ALLOWMULTISELECT|OFN_ENABLESIZING|OFN_HIDEREADONLY,strFilter);
if (OpenDialog.DoModal() == IDOK)
{
CString path;
IShellItemArray *pResult=OpenDialog.GetResults();
DWORD dwCount=0;
IShellItem *pItem;
WCHAR *pFilePath;
pResult->GetCount(&dwCount);
for (DWORD i=0;i<dwCount;i++)
{
pResult->GetItemAt(i,&pItem);
pItem->GetDisplayName(SIGDN_FILESYSPATH,&pFilePath);//其中pFilePath为目标文件的绝对路径
}
}
来源:CSDN
作者:雾雨峰
链接:https://blog.csdn.net/safeili/article/details/78720673