CFileDialog 打开多个目录下的多个文件
生活随笔
收集整理的這篇文章主要介紹了
CFileDialog 打开多个目录下的多个文件
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
使用CFileDialog 打開多個文件,獲取文件路徑。一般的使用情況為同一個文件夾目錄下的某些文件,除文件名不一致外,前面路徑均一樣,使用GetStartPosition(),GetNextPathName()無問題;
但是對于打開文件夾目錄,采用搜索的方式,顯示出若干文件,且不在同一目錄下,再采用上述方式,就出現(xiàn)了問題,不能準(zhǔn)確獲取前綴的文件夾目錄地址,僅僅使用了第一個文件的絕對地址來覆蓋后續(xù)的多選文件
查了好多資料,均給的第一種方式,但是并不能解決我所出現(xiàn)的問題,最后終于找到了一篇解決問題的帖子,現(xiàn)將代碼等展示如下
參考地址: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為目標(biāo)文件的絕對路徑}}
————————————————
版權(quán)聲明:本文為CSDN博主「霧雨峰」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/safeili/article/details/78720673
總結(jié)
以上是生活随笔為你收集整理的CFileDialog 打开多个目录下的多个文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pipe读写前设置O_NOATIME
- 下一篇: 判断文件是否为可执行程序