作者jhchou (jhchou)
看板C_and_CPP
標題Re: [問題] CFileDialog取得多筆FileName
時間Thu Jul 19 00:31:13 2012
※ 引述《don750421 (1+1≠2)》之銘言:
: 這問題和原先的有些雷同,所以我就用原先的問了
: CFileDialog 可以設定選多個檔案
: 那想請問一下,該如何抓到選取到的檔名呢?
: 因為我要將原來的舊檔名改為新的檔名...
: 但是,我發現如果使用 strFileName=CFileDialog::GetFileName();
: 抓到的檔名並沒有順序性...以上一篇的例子為例
: 三個檔案:ABC.01.TXT、ABC.02.TXT、ABC.03.TXT
: 抓到的檔名可能是:strFileName=""ABC.03.TXT" "ABC.01.TXT" "ABC.02.TXT""
: 我使用lpstrFileTitle依序處理選取到的檔案,但如果抓2個以上的檔案就出現NULL
: 如果選取一個檔案,則又可以抓到正確的檔案名稱
: 我試著將m_ofn.lpstrFileTitle抓到的值存入陣列中
: 但是,如果我選取三個檔案,試著抓第二筆,仍然失敗= =
: 請問我有什麼辦法透過lpstrFileTitle取得所選到的檔案名稱呢??
: CString strOldFileName;
: CString strNewFileName;
: strOldFileName = pTransDbData.m_ofn.lpstrFileTitle;
: if (pTransDbData.m_szFileTitle[0]=='\0'){
: CString temp=pTransDbData.m_szFileTitle[1];
: }else{strOldFileName = pTransDbData.m_ofn.lpstrFileTitle;}
其實MSDN已經講得很清楚了
你要用CFileDialog選多個檔案的話,
首先要設OFN_ALLOWMULTISELECT,這相信你已經做了
然後如果你選了多個檔案,
選到的檔案不是存在m_ofn.lpstrFileTitle中,
而是存在m_ofn.lpstrFile中,
所以要先為m_ofn.lpstrFile要一個buffer存檔案名稱,
buffer中會照順序存檔案的路徑,後面跟著選到的檔案的檔名,
可以用GetStartPosition跟GetNextPathName一個一個取出你所選的檔案
我剛剛試了一下,寫了幾行程式,你可以看看
CFileDialog filedlg(TRUE);
filedlg.m_ofn.Flags |= OFN_ALLOWMULTISELECT;
CString filename;
filedlg.m_ofn.lpstrFile = filename.GetBuffer(BUFFER_SIZE);
filedlg.m_ofn.nMaxFile = 100;
filedlg.DoModal();
POSITION pos = filedlg.GetStartPosition();
CString fn;
while(pos != NULL)
{
fn = filedlg.GetNextPathName(pos)
/* Output fn
......
*/
}
filename.ReleaseBuffer();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.24.220.133
推 EdisonX:佛心推 07/19 00:33
※ 編輯: jhchou 來自: 60.248.27.163 (07/19 09:49)
推 don750421:感謝大大,但是後來發現pos離開while迴圈後沒效了.. 07/20 22:52
→ don750421:把pos設為public也是錯誤的值,後來我使用其他方式抓到 07/20 22:53
→ don750421:檔名了,謝謝^^ 07/20 22:54