Re: [問題] CFileDialog取得多筆FileName
※ 引述《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
推
07/19 00:33, , 1F
07/19 00:33, 1F
※ 編輯: jhchou 來自: 60.248.27.163 (07/19 09:49)
推
07/20 22:52, , 2F
07/20 22:52, 2F
→
07/20 22:53, , 3F
07/20 22:53, 3F
→
07/20 22:54, , 4F
07/20 22:54, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章