日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CFileDialog 打开多个目录下的多个文件

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CFileDialog 打开多个目录下的多个文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

使用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博主「霧雨峰」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/safeili/article/details/78720673

總結

以上是生活随笔為你收集整理的CFileDialog 打开多个目录下的多个文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。